pengchou 2013-07-13
技术支持分析师们常常接到用户对服务器高负载的控诉。事实上cPanel软件及其安装的应用很少引发服务器高负载情况。服务器拥有者、系统管理员或者服务器供应商应当对高负载状况进行初步调查,并在确认情况复杂后再向分析人士求助。
服务器高负载因何而起?
下列项目的过度使用会直接导致高负载问题:
该如何检查这些项目?
这取决于大家是要审查当前资源使用情况还是历史资源使用情况。当然,在本文中我们将从这两方面进行探讨。
关于sar的简要说明
历史资源使用情况可通过sar工具查看,该工具在默认情况下应该通过sysstat软件包安装在所有cPanel服务器当中。只要通过cron命令 对sysstat进行周期性执行(/etc/cron.d/sysstat),服务器的运行状态数据就会被收集起来。如果cron没有运 行,sysstat将无法收集历史统计结果。
要在sar中查看历史资源使用情况,我们必须为文件提供与统计数据相符的路径。
举例来说,如果大家打算查看本月23号以来服务器的平均负载状况,可以运行以下命令:
sar -q -f /var/log/sa/sa23
以上命令中的-q用于获取平均负载信息,而-f则用于指定sar从哪个文件中获取信息。请注意,sar可能无法使用一周之前乃至更早的运行信息。
如果大家打算查看当前日期的统计信息,则不必为其指令具体时间。输入以下命令即可显示今天的平均负载情况:
$ sar -q
我们强烈建议大家阅读sar说明文档:
$ man sar
它所提供的统计信息能够帮助我们确切掌握服务器的运行状态。
当前CPU使用情况
运行top,并在Cpu(s)一行中检查%id部分所显示的闲置CPU百分比。该数字越高结果越好,说明CPU的工作负载不强。处于99%闲置状态下的CPU几乎没有处理任何实际任务,而处于1%闲置状态下的CPU则意味着接近满载。
$ top c
提示:可加写P根据消耗CPU资源的多少对进程加以分类。
历史CPU使用情况
查看“%idle”列:
$ sar -p
当前内存使用情况
$ free -m
提示:运行top c并加写M可查看哪个进程占用的内存量最大。
历史内存使用情况
根据sar版本的不同,命令内容也有所区别。早期版本通过添加“-r”参数显示内存使用百分比与虚拟内存使用百分比,但新版本则改用“-s”参数显示虚拟内存使用百分比。
Check %memused and %swpused:
$ sar -r
或者:
$ sar -S
内存使用情况提示:服务器内存占用量较高的情况其实非常正常。这是因为内存的读写速度及效率远高于服务器磁盘,因此操作系统倾向于将内存作为缓冲机制预先载入数据,从而提高数据读取速度。
同样,内存使用百分比也并不是什么大问题(除非大家没有设置虚拟内存分区,但这也与内存本身无关)。大家真正需要关注的是虚拟内存使用百分比,因为只有在服务器的物理内存被全部占用后、虚拟内存才会接替而上发挥作用。这一数字越低,就说明服务器的运行状态越好。如果虚拟内存使用率为0%,则意味着我们的服务器能够完全利用物理内存执行任务。
那么虚拟内存使用率达到多少才算过高?这取决于大家自己的感觉。一般来说,如果虚拟内存使用率一直不高、那么我们的服务器的运行状态还是比较理想的。如果大家发现虚拟内存使用率随时间不断提升(例如由1%到7%再到32%),这就代表服务器上的某些进程正在疯狂吞噬内存,我们需要及时展开调查以了解具体情况(而不该直接安装更多内存)。一旦服务器用尽了所有物理内存与虚拟内存,那么整套系统的运行将变得极为缓慢,需要经过重启才能暂时恢复正常。
当前磁盘I/O使用情况
注意:这一项对于OpenVZ/Virtuozzo容器不起作用。
以下命令将以每秒一次的频率连续显示十次磁盘使用率统计。请大家关注显示结果中的%util列:
$ iostat -x 110
在Linux里,内存有物理内存和虚拟内存之说,物理内存是什么自然无需解释,虚拟内存实际是物理内存的抽象,多数情况下,出于方便性的考虑,程序访问的都是虚拟内存地址,然后操作系统会把它翻译成物理内存地址。
虚拟内存是不会主动释放,而是再使用的时候从硬盘通过io搬运回内存中,所以在使用虚拟内存时,会发现io使用很大,而硬盘速度快慢能够觉得这个过程的快慢,同样数据库select操作也会与硬盘读取速度有关系。