Linux服务器中高负载现象故障排查指南

服务器高负载因何而起?

下列项目的过度使用会直接导致高负载问题:

  • CPU
  • 内存(包括虚拟内存)
  • 磁盘I/O

该如何检查这些项目?

这取决于大家是要审查当前资源使用情况还是历史资源使用情况。当然,在本文中我们将从这两方面进行探讨。

关于sar的简要说明

历史资源使用情况可通过sar工具查看,该工具在默认情况下应该通过sysstat软件包安装在所有cPanel服务器当中。只要通过cron命令对sysstat进行周期性执行(/etc/cron.d/sysstat),服务器的运行状态数据就会被收集起来。如果cron没有运行,sysstat将无法收集历史统计结果。

要在sar中查看历史资源使用情况,我们必须为文件提供与统计数据相符的路径。

举例来说,如果大家打算查看本月23号以来服务器的平均负载状况,可以运行以下命令:

代码:

代码:

  1. [user@host ~]$ sar -q -f /var/log/sa/sa23 

以上命令中的-q用于获取平均负载信息,而-f则用于指定sar从哪个文件中获取信息。请注意,sar可能无法使用一周之前乃至更早的运行信息。

如果大家打算查看当前日期的统计信息,则不必为其指令具体时间。输入以下命令即可显示今天的平均负载情况:

代码:

  1. [user@host ~]$ sar -q 

我们强烈建议大家阅读sar说明文档:

代码:

  1. [user@host ~]$ man sar 

它所提供的统计信息能够帮助我们确切掌握服务器的运行状态。

当前CPU使用情况

运行top,并在Cpu(s)一行中检查%id部分所显示的闲置CPU百分比。该数字越高结果越好,说明CPU的工作负载不强。处于99%闲置状态下的CPU几乎没有处理任何实际任务,而处于1%闲置状态下的CPU则意味着接近满载。

代码:

  1. [user@host ~]$ top c 

提示:可加写P根据消耗CPU资源的多少对进程加以分类。

历史CPU使用情况

查看“%idle”列:

代码:

[user@host ~]$ sar -p

当前内存使用情况

代码:

  1. [user@host ~]$ free -m 

提示:运行top c并加写M可查看哪个进程占用的内存量最大。

历史内存使用情况

根据sar版本的不同,命令内容也有所区别。早期版本通过添加“-r”参数显示内存使用百分比与虚拟内存使用百分比,但新版本则改用“-s”参数显示虚拟内存使用百分比。

Check %memused and %swpused:

代码:

  1. [user@host ~]$ sar -r 

或者:

代码:

  1. [user@host ~]$ sar -r 

代码:

  1. [user@host ~]$ sar -S 

 

【2013年7月11日 51CTO外电头条】技术支持分析师们常常接到用户对服务器高负载的控诉。事实上cPanel软件及其安装的应用很少引发服务器高负载情况。服务器拥有者、系统管理员或者服务器供应商应当对高负载状况进行初步调查,并在确认情况复杂后再向分析人士求助。

服务器高负载因何而起?

下列项目的过度使用会直接导致高负载问题:

  • CPU
  • 内存(包括虚拟内存)
  • 磁盘I/O

该如何检查这些项目?

这取决于大家是要审查当前资源使用情况还是历史资源使用情况。当然,在本文中我们将从这两方面进行探讨。

关于sar的简要说明

历史资源使用情况可通过sar工具查看,该工具在默认情况下应该通过sysstat软件包安装在所有cPanel服务器当中。只要通过cron命令对sysstat进行周期性执行(/etc/cron.d/sysstat),服务器的运行状态数据就会被收集起来。如果cron没有运行,sysstat将无法收集历史统计结果。

要在sar中查看历史资源使用情况,我们必须为文件提供与统计数据相符的路径。

举例来说,如果大家打算查看本月23号以来服务器的平均负载状况,可以运行以下命令:

代码:

 
  1. [user@host ~]$ sar -q -f /var/log/sa/sa23 

以上命令中的-q用于获取平均负载信息,而-f则用于指定sar从哪个文件中获取信息。请注意,sar可能无法使用一周之前乃至更早的运行信息。

如果大家打算查看当前日期的统计信息,则不必为其指令具体时间。输入以下命令即可显示今天的平均负载情况:

代码:

 
  1. [user@host ~]$ sar -q 

我们强烈建议大家阅读sar说明文档:

代码:

 
  1. [user@host ~]$ man sar 

它所提供的统计信息能够帮助我们确切掌握服务器的运行状态。

当前CPU使用情况

运行top,并在Cpu(s)一行中检查%id部分所显示的闲置CPU百分比。该数字越高结果越好,说明CPU的工作负载不强。处于99%闲置状态下的CPU几乎没有处理任何实际任务,而处于1%闲置状态下的CPU则意味着接近满载。

代码:

 
  1. [user@host ~]$ top c 

提示:可加写P根据消耗CPU资源的多少对进程加以分类。

历史CPU使用情况

查看“%idle”列:

代码:

 
  1. [user@host ~]$ sar -p 

当前内存使用情况

代码:

  1. [user@host ~]$ free -m 

提示:运行top c并加写M可查看哪个进程占用的内存量最大。

历史内存使用情况

根据sar版本的不同,命令内容也有所区别。早期版本通过添加“-r”参数显示内存使用百分比与虚拟内存使用百分比,但新版本则改用“-s”参数显示虚拟内存使用百分比。

Check %memused and %swpused:

代码:

  1. [user@host ~]$ sar -r 

或者:

代码:

  1. [user@host ~]$ sar -r 

代码:

  1. [user@host ~]$ sar -S 

内存使用情况提示:服务器内存占用量较高的情况其实非常正常。这是因为内存的读写速度及效率远高于服务器磁盘,因此操作系统倾向于将内存作为缓冲机制预先载入数据,从而提高数据读取速度。

同样,内存使用百分比也并不是什么大问题(除非大家没有设置虚拟内存分区,但这也与内存本身无关)。大家真正需要关注的是虚拟内存使用百分比,因为只有在服务器的物理内存被全部占用后、虚拟内存才会接替而上发挥作用。这一数字越低,就说明服务器的运行状态越好。如果虚拟内存使用率为0%,则意味着我们的服务器能够完全利用物理内存执行任务。

那么虚拟内存使用率达到多少才算过高?这取决于大家自己的感觉。一般来说,如果虚拟内存使用率一直不高、那么我们的服务器的运行状态还是比较理想的。如果大家发现虚拟内存使用率随时间不断提升(例如由1%到7%再到32%),这就代表服务器上的某些进程正在疯狂吞噬内存,我们需要及时展开调查以了解具体情况(而不该直接安装更多内存)。一旦服务器用尽了所有物理内存与虚拟内存,那么整套系统的运行将变得极为缓慢,需要经过重启才能暂时恢复正常。

当前磁盘I/O使用情况

注意:这一项对于OpenVZ/Virtuozzo容器不起作用。

以下命令将以每秒一次的频率连续显示十次磁盘使用率统计。请大家关注显示结果中的%util列:

代码:

 
  1. [user@host ~]$ iostat -x 1 10 

历史磁盘I/O使用情况

代码:

  1. [user@host ~]$ sar -d 

优秀的系统管理员能够准确把握服务器负载的基准线,并在当前负载超出基准时立即做出判断。这样做的主要目的(除了防止服务器陷入半瘫痪并不得不重新启动之外)是为了及时了解负载高企时服务器正在运行哪些项目。快速反应能帮助大家在发现问题后第一时间进行故障排查。

如果服务器负载过高的状况出现在凌晨两点到四点之间,那么正在熟睡中的我们肯定无法马上展开调查。虽然sar会一直守护在服务器身边,帮我们收集这段时间内到底哪些资源的使用率居高不下,但却无法揭示问题出现的实际原因。引发负载过高的原因多种多样,其中包括DoS攻击、垃圾邮件攻击、php脚本设计不当、网络蜘蛛在绘制网络图谱时太过积极、硬件故障、针对用户MySQL数据库的磁盘写入量暴增等等。

好消息是,大家可以利用工具收集这些信息,并在负载过高后将结果自动发送过来。如何实现?从进程列表入手:

代码: 

  1. [user@host ~]$ ps auxwwwf 

uptime也可分析高负债

 

转载:http://www.360doc.com/content/15/0313/16/20671606_454855325.shtml

你可能感兴趣的:(Linux)