Linux系统巡检常用命令
这篇讲的是Linux系统日常巡检的“工具箱”,作者把运维中最常敲的几十条命令按用途做了梳理。从用`uname -a`和`cat /proc/cpuinfo`摸清系统底牌,到用`free -m`、`df -h`、`top`实时监控内存、磁盘与进程状态,再到借助`netstat`、`iptables`、`ifconfig`快速扫描网络连通性与安全设置——几乎覆盖了服务器健康检查的所有关键维度。 文章特别指出,像`uptime`和`cat /proc/loadavg`这样的组合,能让你同时看清系统负载与运行时长;而`ps -ef`配合`w`命令,既能看到全部进程,也能锁定当前登录的活跃用户。对于需要回溯问题的场景,`last`查看登录日志、`dmesg`排查硬件启动信息这些命令也都没落下。整份清单直接贴进终端就能用,省去了新手翻文档的时间,对需要快速上手Linux运维的人尤其友好。
改造 Mojolicious 让日志显示当前模块和行号
这篇讲的是如何为Perl Web框架Mojolicious“加装”一个更强大的日志系统。作者从实际开发中的痛点出发:默认日志只告诉你“做了什么”,却没说“是哪里做的”,排查问题时常常需要来回对照代码。 核心改造思路很巧妙——直接重写框架底层的`Mojo::Log::_format`格式化方法。通过Perl的`caller`函数,获取日志打印语句所处的模块名称和行号,并将其注入日志输出中。文章提供了针对Mojolicious::Lite和标准Mojolicious应用的两种修改代码,只需添加几行,就能将原本模糊的日志 `[debug] Routing to a callback.`,变得一目了然地变成 `[debug] [Mojolicious::Routes 119] Routing to a callback.`。 这个改造让每条日志都自带“源代码坐标”,对于调试复杂路由、插件调用链尤为实用。它不仅是一个实用技巧,也展示了如何通过局部定制来增强框架的可观测性。
Linux 常见高危操作
这篇讲的是Linux系统里那些容易被忽视却可能导致灾难性后果的操作。作者从日常运维中常见的危险命令入手,清晰地指出了三个典型“雷区”。 首先是直接操作设备文件。像`echo " " > /dev/sda`或`dd if=/dev/zero of=/dev/sda`这样简单的命令,能瞬间破坏整个磁盘的文件系统与数据,且几乎无法恢复。其次是极具误导性的`rm -rf /$SOME_DIR_TOBE_DEL/`,一旦变量未赋值,就会变成删除根目录的“终极指令”。最后是重定向使用不当,错误的写法可能覆盖`/dev/null`,导致系统标准输出和错误流混乱,影响全局服务。 文章没有复杂的理论,而是用具体命令示例揭示了风险根源——对命令和系统底层文件缺乏敬畏。它提醒每一位Linux使用者,在键入回车前务必确认命令含义,因为这些操作往往没有“撤销”选项。
cpuspeed和irqbalance服务器的两大性能杀手
这篇讲的是作者在性能测试中发现服务器CPU频率异常的问题。经过排查,发现根源是irqbalance和cpuspeed这两个服务在作怪。 理论上,irqbalance能智能分配中断以提升性能或降低功耗。但作者指出,在实际的服务器环境中,它反而会扰乱CPU的负载均衡,成为性能瓶颈。而cpuspeed服务,即便在BIOS中设置了最高性能模式,它依然可能强行干预并锁死CPU的主频,对追求稳定高性能的服务器而言是个大坑。 文章给出的解决方案非常直接:彻底停用并禁用这两个服务。作者还进一步分享了服务器运维的一个精简思路:在`/etc/rc3.d/`目录下,只保留crond、sshd、rsyslog和network等必要服务的启动链接,将其他所有服务移出默认启动列表,按需手动开启。这种做法能最大程度减少后台服务对核心业务的干扰。 对于遭遇类似性能迷雾的运维人员,文中提供了具体可执行的命令和优化思路,避免了“CPU跑不满”的常见坑。
服务器批量执行工具 PSSH
运维或开发同学经常需要面对这样的场景:当服务器数量达到几十甚至上百台时,如何高效地执行统一操作?这篇文章介绍了一个实用的命令行工具——PSSH(Parallel-SSH)。作者从管理一个拥有60多台Ubuntu执行节点的Oracle Gird Engine集群的实际经验出发,展示了如何利用PSSH来简化批量管理工作。 文章详细演示了PSSH的几个核心命令:用pssh批量执行命令查看所有服务器状态;用pscp将文件同时上传到多台服务器;用pslurp从服务器集群批量下载文件到本地不同目录;以及用prsync保持开发机与生产服务器间的数据同步。每个命令都配有清晰的输入输出示例,比如展示五台服务器(grid01至grid05)的同步操作结果,非常直观。 除了展示功能,文章也提到了PSSH的一个替代方案:对于不排斥Python的开发者,也可以使用Fabric来编写脚本实现类似的批量任务管理。这为不同技术背景的读者提供了选择参考。对于管理大量服务器的运维工作来说,这个工具是个不错的选择。
跟我学Rsyslog
这篇讲的是日志管理工具Rsyslog的上手指南。作者从日志管理的重要性切入,提到业界热门的ELK三件套虽强,但自己更偏好快速上手的方案,由此引出Linux传统日志工具Syslog及其配置逻辑——通过Facility和Severity来分类和路由日志。面对Syslog在功能和性能上的不足,作者选择了当前多数发行版默认的Rsyslog。 文章重点在于快速实践。作者以CentOS为例,演示了通过RPM安装Rsyslog、关闭旧Syslog服务、启用调试模式等基础步骤。核心部分结合一个具体场景——“将多台Web服务器的access日志集中到一台App服务器”,详细拆解了Rsyslog的工作流程(输入、过滤、输出)。通过配置示例,讲解了如何在Web服务器端用`imfile`模块读取本地日志,并通过TCP发送;在App服务器端则开启TCP接收、使用`omfile`模块和模板来汇总存储。文中还提及了`StateFile`的持久化策略,以及利用`omprog`模块进行更高级处理的可能性。 作者最后也指出,Rsyslog的主要缺点在于版本间的兼容性差异较大,使用时需留意文档。整体而言,这是一篇注重实操、逻辑清晰的入门教程,适合希望快速部署集中式日志管理又不想陷入复杂生态的运维或开发人员。
使用 OpenVPN Access Server 轻松搭建 VPN 服务器
这篇讲的是如何快速搭建一个可用的VPN服务器。作者指出,虽然传统方式如 ssh -D 或 sshuttle 能满足临时需求,但对新手而言,从头配置开源OpenVPN过程繁琐。因此,文章推荐了OpenVPN的商业版Access Server,其免费许可证支持2个并发用户,非常适合个人或小型使用场景。 文章的核心优势在于“开箱即用”。作者详细演示了在CentOS 6.x和Ubuntu 14.04上的安装流程,只需几条命令完成下载和安装。安装后会提供明确的管理后台和客户端访问地址,用户使用默认的“openvpn”账户登录后,几乎无需额外配置即可连接使用。 对于客户端选择,文章介绍了官方客户端和流行的开源客户端Tunnelblick的使用方法,并特别说明了在Mac上通过导入特定配置文件连接Tunnelblick的稍显特殊的步骤。整体来看,这是一篇面向实用主义者的快速入门指南,省去了复杂的配置过程,让需要临时或简单VPN服务的用户能迅速上手。
如何在Redis里按模式删除数据
这篇讲的是一个Redis内存突然暴增导致宕机的排查案例。作者从服务器异常消耗几十G内存、最终因SWAP宕机说起,一开始和DBA同事以为是有大键占用了空间,但用工具分析后排除了这个可能。 问题随后转向了另一个方向:即使单个键不大,但大量相同模式的键累计起来,占用的空间也可能非常可观。作者最初想用 `KEYS` 配合 `DEL` 命令批量删除可疑键,结果因为数据量太大,`KEYS` 命令直接让服务器再次崩溃——这暴露了KEYS命令在生产环境中的巨大风险。 最终,作者改用支持游标迭代的 `SCAN` 命令,通过PHP脚本分批扫描并删除目标键,同时监控内存变化,成功锁定了问题源头。整个过程也强调了一个运维要点:除了关注大键,监控Redis键总数的变化幅度同样重要,这能帮助及早发现类似批量写入导致的隐患。
CentOS iptables 报错解决办法
在CentOS系统中启动iptables服务时,不少运维或开发同学会遇到一个令人困惑的报错:“Setting chains to policy ACCEPT: security raw nat filter [FAILED]”。这篇文章就直面了这个具体的“坑”。 问题的根因非常微妙:CentOS系统在iptables中默认增加了一个名为“security”的表,但系统自带的启动脚本 `/etc/init.d/iptables` 中并没有包含这个表的处理逻辑。因此,当脚本尝试按顺序为所有表设置策略时,在处理到未定义的“security”表时就会失败。 作者提供了两种解决思路。一种是获取并应用作者准备好的补丁文件,一键修复。另一种更实用的方法是手动编辑 `/etc/init.d/iptables` 脚本,在脚本处理表的循环中,显式地添加对“security”表的策略设置。具体来说,需要在 `case` 语句里增加一段代码,指定对INPUT、OUTPUT和FORWARD链设置策略,并将其放在“raw”表之前。完成修改并保存后,重启iptables服务即可恢复正常。 这篇短文的价值在于,它不仅解决了由系统特定差异导致的常见报错,还给出了具体、可操作的代码级修改方案,对于使用CentOS并遇到同类问题的读者来说,非常实用。
web业务尽快升级到centos 6.4的理由
这篇讲的是,面对中国网络环境复杂、丢包率高的现实挑战,Web业务尤其是CDN系统如何通过升级操作系统来获得更优的网络性能。作者从CentOS 6.4的内核变化出发,重点剖析了几个关键的TCP协议层补丁。 其中,RFC2988bis补丁将SYN包丢失后的重试时间从默认的3秒大幅缩短至1秒,显著降低了首次连接的延迟。而调整初始拥塞窗口(initcwnd)和接收窗口(initrwnd)大小,则减少了Web短连接场景下必要的TCP交互轮次,提升了数据传输效率,文章也给出了具体的配置命令。此外,Proportional rate reduction补丁优化了丢包后的恢复策略,使得拥塞窗口的减少更为平滑,降低了平均传输延迟。 这些补丁主要源自Google的实践,能够直接提升业务在弱网环境下的响应速度和稳定性。对于运维和后端开发人员而言,这是一次了解底层网络优化如何落地到具体操作系统版本的实用参考。
linux单机根据ip查看流量
这篇讲的是在双线机房环境下,如何精确统计Linux单机上不同IP(如电信、网通)的独立流量。作者从实际运维痛点出发:一台机器绑定多个IP时,系统默认的流量监控工具无法区分各IP的收发数据量。通过调研无果后,他选择用SystemTap编写了一个内核级脚本,直接挂钩TCP的收发函数来按IP累加数据包大小。脚本运行后能清晰列出每个IP的接收与发送千比特数。作者也坦诚说明,该方案目前仅支持TCP流量统计,若服务器涉及UDP服务则数据不准,且SystemTap需要安装调试信息包。整体方案简洁实用,为类似场景提供了一个可直接复用的轻量级诊断思路。
python实现一个P2P文件发布
这篇讲的是一个实用的运维效率提升方案。作者面对服务器规模增长后文件分发变慢的痛点,没有继续优化传统的单点推送,而是转向了分布式思路,基于Python的libtorrent库实现了一个轻量的P2P文件发布工具。 核心思路是利用BT协议让已接收文件的机器同时作为源进行分享,从而将下载压力分散到整个网络。文章附上了完整的工具代码,展示了如何创建种子、设置监听与限速、管理做种时间等关键环节。作者进行了真实环境的测试:将一个240MB的内核文件分发给10个机房、70多台服务器,在源端限速2MB/s的情况下,全部传输完成仅需约140秒。这个效率对比传统的单点分发有了质的飞跃。 通过这个案例,可以看到即使是经典的P2P技术,在特定场景下依然能巧妙地解决现代运维中的规模化部署难题。工具已开源,对于需要频繁进行大规模文件同步的团队来说,具有很高的实用参考价值。
SSH日常用法小例
这篇讲的是如何将SSH从“会用”提升到“用得顺手”。作者从最基础的命令行登录出发,逐步展示了如何通过配置文件别名、公钥认证和代理转发等一系列技巧,一步步把繁琐的登录过程简化到极致——最终实现“一次配置,处处免密”。 文章特别对比了传统密码登录与公钥认证在便利性上的巨大差异。对于文件传输,作者不仅介绍了最常用的scp命令,并解释了-r和-C参数的作用,还推荐了sftp这个基于SSH的交互式工具,为不同场景提供了解决方案。其中,ssh -A代理转发用于跳板机的思路也很有启发性。 作者用实际例子告诉我们,掌握这些小技巧,能让你在连接和管理多台服务器时,省去大量重复输入密码的时间,大幅提升日常工作效率。对于需要频繁远程操作的开发者和运维人员来说,这是一份非常实用的快速参考。
底层通讯协议问题排查案例
这篇讲的是作者在处理用户技术支持时,亲历的一系列底层网络通讯协议“踩坑”与排查实录。这些案例看似离奇,根因却往往藏在协议栈的深处或网络环境的微妙配置中。 文章详细拆解了五个典型案例:包括NAT环境下TCP时间戳机制导致的连接失败、ISP篡改MTU引发的UDP丢包、中间网络设备异常引起的MSS分片问题、TCP动态窗口无法增长导致的速率极低,以及网卡速率协商错误造成的单向慢传输。每个案例都从具体现象出发,通过抓包分析等手段定位到根本原因,并给出了如调整内核参数(tcp_timestamps、tcp_window_scaling)、修改MSS值、检查网卡状态等明确的解决方法。 这不仅是一份实用的故障排查手册,更像是一份网络协议在复杂生产环境中行为特性的观察笔记。作者将枯燥的协议规范(如RFC1323、MTU)与鲜活的一线问题结合,展示了如何从表象层层深挖至协议与环境的交互点。对于需要处理类似网络疑难杂症的开发者或运维人员,文中从现象推导到根因的排查思路,以及那些意想不到的解决方案,都提供了直接的参考和启发。
大量小包的CPU密集型系统调优案例一则
这是一篇典型的方案/架构类文章,作者从一个处理大量小数据包的生产系统调优实践出发,详细分享了将单网卡流量从100M提升至230M(预估可达480M)且CPU负载保持均衡的完整优化路径。 核心方案围绕着“硬件选型与内核调优”展开。作者首先强调了必须使用支持MSI-X和多队列的网卡,这是性能提升的硬件基础。在软件层面,他将操作系统从RHEL 5升级至RHEL 6.1,以利用其内核对Google RPS/RFS补丁的支持,从而将软中断负载均衡到多个CPU核心。此外,文章还详细说明了如何手动关闭irqbalance服务,并通过设置smp_affinity将网卡队列中断精确绑定到指定CPU,以实现更精细的负载控制。对于发送方向,作者也提到了利用内核2.6.38引入的XPS特性进行优化。 整个调优过程有很强的数据支撑,作者展示了调优后单网卡承载15万/秒数据包、系统负载为0且各CPU核心均保有余量的生产环境截图,并解释了因网卡队列数与CPU数不匹配时,为何不能简单将中断广播到所有CPU,而需要采用物理/固定模式进行一对一绑定。文章为类似网游、CDN等“小包量大”的场景提供了一套可落地的系统性能挖掘手册。
在tomcat应用中获得原始IP
这篇讲的是如何在使用 Apache/Nginx 作为反向代理的 Tomcat 应用中,重新获取被代理层“吃掉”的客户端原始信息。作者从实际场景出发,指出 Apache 代理后,Tomcat 得不到客户端的真实 IP、主机名和是 HTTP 还是 HTTPS 协议,这会给生成绝对重定向 URL 和页面资源链接带来麻烦。 文章的核心方案分两步:先在 Apache 端配置,通过 `ProxyPreserveHost` 转发原始 Host 头,并添加 `X-Forwarded-Proto` 等自定义头部来传递协议等信息。然后,在 Tomcat 端配置 `RemoteIpValve`,让它能智能地“读懂”并应用这些从代理转发过来的头部,从而在 `HttpServletRequest` 中还原出真实的客户端信息。 文章还贴心地附上了测试用的 Servlet 代码和对比结果。测试表明,配置完成后,无论前端是 HTTP 还是 HTTPS 访问,Tomcat 都能正确获取到原始 IP 和协议类型。这套组合配置为解决代理环境下的应用逻辑判断提供了清晰有效的路径。
Intel 10-GbE 网卡性能优化[翻译]
这篇翻译文档详细拆解了如何将一块 10GbE 网卡的性能从默认的“可用”状态压榨到“极限”。作者指出,Linux 的默认网络栈配置(如缓冲区大小、TCP 内存分配)是为了可靠性而非峰值吞吐量设计的,这对万兆网卡尤其不利。 文章的核心思路是分层优化,并基于 Intel 官方驱动文档提供了实操步骤。优先级最高的操作是在交换机和服务器两端启用巨型帧(MTU 9000),这能大幅提升大流量传输效率。其次是调整内核的 `sysctl` 参数,例如关闭 SACK 和时间戳、将 TCP 收发缓冲区统一设为 10MB,并提高网络设备积压队列上限。更进阶的操作是通过 `setpci` 命令调整网卡 PCI-X 总线的 MMRBC 寄存器,将内存读块大小提升到 4KB,以增强对突发流量的处理能力。 文章最有说服力的部分在于其测试数据:经过上述优化,使用 `iperf` 测试的吞吐量从优化前的约 4.70 Gbits/sec 飙升至 9.90 Gbits/sec,几乎跑满了万兆带宽。作者强调,优化过程需配合压力测试(如 iperf、netperf)来验证效果,结果可能因硬件和网络环境而异。对于需要榨干网卡性能的 HDFS、高性能计算等场景,这套调优方法提供了清晰的参考路径。
加速scp传输速度
这篇讲的是如何突破scp文件传输的速度瓶颈。作者在实际场景中发现,默认配置下传输400GB文件耗时太长,于是系统性地测试了加密算法、压缩选项和完整性校验算法对速度的影响。 测试数据表明,选择更轻量的加密算法(如arcfour128、aes192-cbc)能显著提速,通常“越弱”的算法速度越快。有趣的是,启用ssh内置压缩反而常常拖慢速度,因为压缩本身消耗了时间,除非传输的是可压缩率极高的数据。此外,使用umac-64这类校验算法也比默认的hmac-md5带来约10%-20%的性能提升。 基于这些发现,作者建议直接尝试类似 `scp -c arcfour128 -o "MACs umac-64@openssh.com"` 的命令组合,往往能让传输速度翻倍。文章提醒,最终效果高度依赖数据类型和网络环境,关键在于根据实际情况做针对性调优。
Linux如何统计进程的CPU利用率
想在脚本里“非阻塞”地获取Linux进程CPU利用率,却遇到top需要等1秒、ps只显示平均值的问题?这篇文章就从这个实际需求出发,直接深入到/proc文件系统,带你看清背后的原理。 文章的核心是对比两种思路:使用现成工具vs手动计算。作者明确指出,像top和ps这样的工具,虽然方便,但本质上提供了不同的“快照”——ps给出的是进程生命周期的平均利用率,而top需要至少1秒的采样间隔。关键差异在于,它们都无法满足对“当前时刻”瞬时利用率的精确、非阻塞获取。 真正的解决方案隐藏在/proc/stat和/proc/[pid]/stat这两个文件中。文章详细拆解了其中各列的含义,并给出了具体的计算公式:在两个时间点分别读取系统总CPU时间片和进程CPU时间片,通过差值比来计算这段时间内的利用率。这就像用两张“照片”的位移差来算速度,揭示了CPU利用率本质是一个时间段内的统计量,而非一个瞬时值。 最后,文章还解释了ps命令中%CPU指标的准确含义,即它是进程自启动以来的累计平均利用率。如果你需要在监控脚本中实现高精度的进程CPU统计,或者对系统工具背后的实现原理感到好奇,这篇文章提供的思路和细节会很有参考价值。
记录一个软中断问题
这篇讲的是如何定位并解决Linux系统软中断负载不均的“坑”。作者从一台XEN虚拟机的Nginx服务器入手,通过top命令观察到软中断(si)数值异常,且几乎全部集中在CPU1上,导致该CPU成为性能瓶颈。 进一步用`/proc/softirqs`确认,网络收包中断(NET_RX)是主要来源。排查发现,问题根源在于宿主机的网卡运行在单队列模式,且中断被绑定到了特定CPU上。虽然尝试修改中断亲缘性(`smp_affinity`),但对单队列网卡无效。 最终,作者启用了Linux内核的RPS(Receive Packet Steering)功能,通过软件层面将网络包处理负载分摊到多个CPU核心。配置后,软中断成功从单一CPU分散到了两个CPU上,显著改善了负载不均的问题。 文章还附带介绍了`itop`这个中断监控小工具,并提及了Nginx的`worker_cpu_affinity`配置、NUMA架构调优等后续优化思路,为遇到类似网络中断瓶颈的开发者提供了一套完整的排查与优化路径。