会诊:系统负载陡然上升

发表于:2007-07-04来源:作者:点击数: 标签:
系统centos3.4 近期的一天,好好的服务器突然不能通过ssh登录了,可以输入帐号和密码,但就是不能进入。 直接在机房操作,偶尔能登录,大多数启动到快要结束时,机器就“死”了,重启机器,在其没“死”之前,用ssh迅速登录,发现负载逐步上升到6以上,然后

系统centos3.4
近期的一天,好好的服务器突然不能通过ssh登录了,可以输入帐号和密码,但就是不能进入。
直接在机房操作,偶尔能登录,大多数启动到快要结束时,机器就“死”了,重启机器,在其没“死”之前,用ssh迅速登录,发现负载逐步上升到6以上,然后就“死”了,而CPU的负担十分正常。
但是,奇怪的是,架在上面的web可以浏览,webmail也可以使用,但是,却收不到系统的日志信了。
是不是有这样的说法:机器硬件如果出故障,会出现这样情况。

 shiqiaoliang 回复于:2005-07-31 12:03:06
用VMSTAT和TCPDUMP查看一下。估计是你的那个进程负担过重。消耗了太多的资源

 bingosek 回复于:2005-07-31 13:08:48
unix系统负载到了6系统基本上就不可用了

 bingosek 回复于:2005-07-31 13:12:30
[quote:6e7c5dab20="shiqiaoliang"]用VMSTAT和TCPDUMP查看一下。估计是你的那个进程负担过重。消耗了太多的资源[/quote:6e7c5dab20]
vmstat不能具体到每个进城耗费到多少资源,tcpdump是一个sniffer,除非确定是网络造成负载过重,要判断一下有些什么流量,不然不会用tcpdump解决性能问题的。我觉得用top比较好一些,top默认显示的第一个进城就是使用cpu最多的进程。注意,top也比较耗费cpu资源。

 ymyhz 回复于:2005-07-31 14:15:31
谢谢,各位!当我偶然登录时,及时做:
用top观察,不见有异常进程,用iptraf也不见有异常流量。
顺便补充:vsftp也不能用。

 shiqiaoliang 回复于:2005-07-31 14:26:54
综合起来用。先用TOP按i键,会显示当前活动的进程,你可以确定是哪个活动进程在跑。在用vmstat 1,查看资源瓶颈消耗在哪里,比如查看SWAP的交换是否很大。判断内存是不是很忙。iostat 1 查看IO的情况。如果是网络程序消耗了很多资源。用tcpdump侦察一下,基本就可以确定了

 platinum 回复于:2005-07-31 14:37:22
# sar -n DEV
网络负载状况

 haohaoo 回复于:2005-07-31 14:42:25
[quote:395d7d6e7c="bingosek"]unix系统负载到了6系统基本上就不可用了[/quote:395d7d6e7c]

我的服务器能跑到400多的负载哦

 platinum 回复于:2005-07-31 14:46:44
[quote:195c40a8a0="bingosek"]unix系统负载到了6系统基本上就不可用了[/quote:195c40a8a0]
我有一台负责计算的,平均 1 分钟在 12 左右,平均 5 分钟和 15 分钟大概维持在 6,都没有问题的

 bingosek 回复于:2005-07-31 15:48:01
我记得linux adminstration handbook上是这么说的,等我找一下先

 achaoge 回复于:2005-07-31 16:13:26
看看你的启动序列中启动了哪些程序。然后进入单用户模式,一个一个的启动你需要的服务,看看到底是哪个会导致系统不可用。

 bingosek 回复于:2005-07-31 16:24:24
:em16: 找不到了,刚才查到网上两篇文章,原来这个东西好复杂的
http://www.teamquest.com/resources/gunther/ldavg1.shtml
http://www.teamquest.com/resources/gunther/laquiz.shtml

 bollwarm 回复于:2005-07-31 19:06:17
我的一台服务器,作为vod的文件存储的,基本上负载100多,还没有问题就是登陆慢的很

 shiqiaoliang 回复于:2005-07-31 20:31:35
可以用和良好的使用是不一样的。一般每个CPU占用的LOAD不适宜超过3个。也就是2个CPU不适宜超过6,一台机器如果有两个CPU,LOAD是6,是可以被认为能够接受的。如果超过10,就可以认为存在性能问题。就应该查原因。或者添加硬件设施

 shiqiaoliang 回复于:2005-07-31 21:04:19
刚才看了楼主的链接的网页,确实不错。值得研究啊

 hywangtao 回复于:2005-08-01 08:40:57
弱弱的问下,6在哪看的? 用什么命令?

 soway 回复于:2005-08-01 08:53:16
[quote:55243084e7="platinum"]
我有一台负责计算的,平均 1 分钟在 12 左右,平均 5 分钟和 15 分钟大概维持在 6,都没有问题的[/quote:55243084e7]

做计算用的linux服务器,特别指的是i386体系的,建议一颗cpu只跑一个进程。
否则进程之间互相竞争cpu资源,导致很慢的。

 hywangtao 回复于:2005-08-01 09:04:21
问一下呀,楼主的linux负载6是怎么看的呀,谢谢

 hywangtao 回复于:2005-08-01 09:15:51
找到了,原来top里面就有,不过我的怎么能看到3个load

 bingosek 回复于:2005-08-01 11:23:29
[quote:4851f0a0c9="hywangtao"]找到了,原来top里面就有,不过我的怎么能看到3个load[/quote:4851f0a0c9]
1 5 15分钟的load everage,其实load everage这个名称不是名副其实的

 xutong 回复于:2005-08-01 11:37:39
请问,那个load的值和硬件参数是怎么个对应关系
那位大侠给个经验值各级别的机器大概的load值都是多少是比较好的状态
或是有没有比较简单的对比关系的算法

 bingosek 回复于:2005-08-01 12:34:29
[quote:56d9364ecd="xutong"]请问,那个load的值和硬件参数是怎么个对应关系
那位大侠给个经验值各级别的机器大概的load值都是多少是比较好的状态
或是有没有比较简单的对比关系的算法[/quote:56d9364ecd]
没有达到多少load average就应该加多少内存或cpu这样的对应关系
详细可以看看我发的链接

 bingosek 回复于:2005-08-01 12:38:19
看看这一段:
2.2  What the Gurus Have to Say
Let's turn to some UNIX hot-shots for more enlightenment. 
Tim O'Reilly and Crew
The book UNIX Power Tools [POL97], tell us on p.726 The CPU: 
The load average tries to measure the number of active processes at any time. As a measure of CPU utilization, the load average is simplistic, poorly defined, but far from useless.
 
That's encouraging! Anyway, it does help to explain what is being measured: the number of active processes. On p.720 39.07 Checking System Load: uptime it continues ... 
... High load averages usually mean that the system is being used heavily and the response time is correspondingly slow.

What's high? ... Ideally, you'd like a load average under, say, 3, ... Ultimately, 'high' means high enough so that you don't need uptime to tell you that the system is overloaded.
 
Hmmm ... where did that number "3" come from? And which of the three averages (1, 5, 15 minutes) are they referring to? 
Adrian Cockcroft on Solaris
In Sun Performance and Tuning [Coc95] in the section on p.97 entitled: Understanding and Using the Load Average, Adrian Cockcroft states: 
The load average is the sum of the run queue length and the number of jobs currently running on the CPUs. In Solaris 2.0 and 2.2 the load average did not include the running jobs but this bug was fixed in Solaris 2.3.
 
So, even the "big boys" at Sun can get it wrong. N.netheless, the idea that the load average is associated with the CPU run queue is an important point. 
O'Reilly et al. also note some potential gotchas with using load average ... 
...different systems will behave differently under the same load average. ... running a single cpu-bound background job .... can bring response to a crawl even though the load avg remains quite low.
 
As I will demonstrate, this depends on when you look. If the CPU-bound process runs long enough, it will drive the load average up because its always either running or runnable. The obscurities stem from the fact that the load average is not your average kind of average. As we alluded to in the above introduction, it's a time-dependentaverage. Not only that, but it's a damped time-dependent average. To find out more, let's do some controlled experiments. 

鬼佬自己也晕乎乎的

 ymyhz 回复于:2005-08-01 21:08:42
各位大大,我的机器原来好好的,突然间,机器就痴呆了,注意,当我偶尔进入后,CPU的负担很正常,就是看着load慢慢上升,直到机器不动,但是web仍然可以用,而vsftp、ssh、cron等等没有反应了。

 chenl 回复于:2005-08-02 12:39:43
建议进入系统维护模式,然后手动把需要启动的Daemon一项一项的启动,看看到底是哪儿出了问题。
如果不能够确认自己的系统是干净的,最好用chkrootkit/rkhunter之类的工具,彻底的查一下。我原来的一台oracle的server就曾经因为被入侵而down掉的。

 yenakata 回复于:2005-08-02 12:45:55
应该是在队列中的任务数

 qijismart 回复于:2005-08-02 17:41:44
断网测试

 ymyhz 回复于:2005-08-03 17:31:32
我觉得用光盘进入系统维护模式可能比较好,我也常常chroot /image/system,但是进入后,一项一项启动进程我倒没有试过。
也有可能被入侵了。得用chkrootkit
现在我在外地,回杭州后,试一试。

 惠繪洋 回复于:2005-08-03 17:39:09
請問負載在那可以睇到呢?

之前我也有試過系統大部份服務都不能使用, 在本機登入時慢得很勁呢, 差不多5分鐘才能登入, 用top檢查及iptraf也沒有特別負載的顯示, 後來慢慢向硬件著手, 發現硬碟有不正常的讀寫... 我只有快把整個系統dd到另一個硬碟上, 再啟動. 慢的問題就消失了... 而那硬碟在windows上跑也有同樣問題... 很熱及很慢, 安裝一個windows2000都要大半天呢... 
可能我這事幫得你忙.

 rhinux 回复于:2005-08-03 22:16:49
[quote:4151c61130]做计算用的linux服务器,特别指的是i386体系的,建议一颗cpu只跑一个进程。
否则进程之间互相竞争cpu资源,导致很慢的。[/quote:4151c61130]

怎样做到一个cpu跑一个进程呢?

 lianyong 回复于:2005-08-04 00:44:00
[quote:95b6589da7="ymyhz"]各位大大,我的机器原来好好的,突然间,机器就痴呆了,注意,当我偶尔进入后,CPU的负担很正常,就是看着load慢慢上升,直到机器不动,但是web仍然可以用,而vsftp、ssh、cron等等没有反应了。[/quote:95b6589da7]
这个现象和我遇到过的一个情况比较类似,不过偶的机器是HP 9000小型机,系统是HP-UX 11.0,现象也是CPU的负担很正常,load慢慢上升,只至机器hung住,虽然能PING通,但机器任何操作的做不了,包括使用终端。给个TOP截屏:
System: hpux                                        Wed Apr 20 08:11:36 2005
[color=red:95b6589da7]Load averages: 13.42, 11.94, 10.22[/color:95b6589da7]
109 processes: 107 sleeping, 2 running
Cpu states:
CPU   LOAD   USER   NICE    SYS   IDLE  BLOCK  SWAIT   INTR   SSYS
 0   10.90   0.2%   0.0%   0.0%  [color=green:95b6589da7]99.8% [/color:95b6589da7]  0.0%   0.0%   0.0%   0.0%
 1   15.95   0.0%   0.0%   0.2%  [color=green:95b6589da7]99.8% [/color:95b6589da7]  0.0%   0.0%   0.0%   0.0%
---   ----  -----  -----  -----  -----  -----  -----  -----  -----
avg  13.42   0.0%   0.0%   0.0% 100.0%   0.0%   0.0%   0.0%   0.0%

Memory: 56276K (1920K) real, 69304K (11496K) virtual, 54832K free  Page# 1/6

CPU TTY     PID USERNAME PRI NI   SIZE    RES STATE    TIME %WCPU  %CPU COMMAND
 1   ?       33 root     152 20  1856K     0K run      2:06  1.65  1.64 vxfsd
 0 tty0p0  3305 root     168 20  2616K   312K sleep    5:32  0.25  0.25 top
 0 pts/ti  7209 root     178 20  2632K   372K run      2:14  0.24  0.24 top
 1   ?        3 root     128 20    32K     0K sleep    7:43  0.18  0.18 statdaemon
 1   ?       12 root     -32 20    32K     0K sleep    5:49  0.11  0.11 ttisr
 1   ?       20 root     147 20    32K     0K sleep    0:01  0.05  0.05 lvmkd
 0   ?     2520 hcb      156 20   303M   188K sleep    4:49  0.03  0.03 oninit
 0   ?     2521 hcb      168 20   303M   128K sleep    0:24  0.02  0.02 oninit
 0   ?        0 root     128 20    32K     0K sleep    0:31  0.02  0.02 swapper
 1   ?        1 root     168 20   496K   220K sleep    0:00  0.02  0.02 init
 0   ?        2 root     128 20    32K     0K sleep    1:34  0.02  0.02 vhand
 1   ?        4 root     128 20    32K     0K sleep    0:11  0.02  0.02 unhashdaemon
 0   ?       18 root     147 20    32K     0K sleep    0:00  0.02  0.02 lvmkd
 0   ?       19 root     147 20    32K     0K sleep    0:01  0.02  0.02 lvmkd
 0   ?       21 root     147 20    32K     0K sleep    0:01  0.02  0.02 lvmkd
 0   ?       22 root     147 20    32K     0K sleep    0:01  0.02  0.02 lvmkd
 0   ?       23 root     147 20    32K     0K sleep    0:01  0.02  0.02 lvmkd
 1   ?       25 root     100 20    32K     0K sleep    0:01  0.02  0.02 smpsched
 1   ?       26 root     100 20    32K     0K sleep    0:01  0.02  0.02 smpsched

至于出现的原因,也找了很长时间,最先怀疑的是swap的问题,也就是内存
交换部分的问题(HP-UX有vhand和swapper进程管理这方面,不知道LINUx
有没有?),到最后这种现象越来越频繁,最终一次机器hung住重启后报硬盘错,幸好有备份,换了一新盘,重新用磁带倒入系统(SWAP区也在这块盘)
至今没再出现问题了!
应此,我觉得楼主的现象有可能是某个WEB应用需用大量内存,这就需要使用SWAP区,而这个SWAP区可能有点问题。。。
Linux内存交换到底是什么机制,没深入研究过,到此打住,
只是给楼主XD一个考虑的方向。。。

 miFor 回复于:2005-08-04 01:14:47
为什么不先dmesg一下看看有没有kernel报出来什么信息了

 shiqiaoliang 回复于:2005-08-04 13:44:25
有些时候是很难判断的。当一个程序达到了瓶颈。这时候占用的CPU,内存,IO等可能都不大。但这个程序已经无法处理那么多的连接。很容易出现LOAD很高,但CPU,内存使用很小。IO也不高的情况。这时候就要凭经验了。

 mudga 回复于:2005-08-06 07:37:46
同意楼上的,这种问题很难找到问题所在,可能是负载太大,也可能是硬件问题.我比较做的多的是排除法,把在运行的程序一个一的kill掉,看看到那个正常,就是故障点所在,找到产生问题的程序,就可以基本确定是硬件还是软件问题

 hongliang13 回复于:2005-08-17 09:45:47
load值过高我的第一反应就是磁盘或raid出问题,不然的话正常跑的系统不会自己就load突然过高。就算是网络流量瞬间增大狠多,也不至于将系统压榨到连登陆都狠难的地步。系统上跑个snmp+cacti还是不错的,即使系统load非常高(比如高到200),还是可以远程查看系统情况的(200的load就是这么看到的)

 ymyhz 回复于:2005-08-19 21:31:37
谢谢大家热情相助,问题发现了:在硬盘上放了过多的Linux ISO,把硬盘塞满了造成load急剧上升。删掉一些后系统正常。

拜读大家的帖子获益匪浅。感谢中……

原文转自:http://www.ltesting.net