cpu使用率多少算正常高

Linux cpu占用率居高不下 调试_Linux教程_Linux公社-Linux系统门户网站
你好,游客
Linux cpu占用率居高不下 调试
来源:Linux社区&
作者:shenlinken
今天调试程序,使用top命令后,发现程序的cpu占用率很高,一直在99,这很可怕,所以来调试。
使用top命令,得如下结果
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1997 root 20 0 358m 71m 3208 S 99.1 7.2 81:53.50 test1 root 20 0
1176 S 0.0 0.2 0:01.36 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:46.51 ksoftirqd/0 4 root 20 0 0 0 0 S 0.0 0.0 0:38.53 kworker/0:0 6 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
可知test的PID为1997
然后具体查看test里线程的cpu使用情况
使用 top -H -p 1997 命令
root@linuxidc:~# top -H -p 1997
top - 17:19:47 up 15 days, 34 min, 4 users, load average: 1.02, 1.06, 1.06Tasks: 8 total, 1 running, 7 sleeping, 0 stopped, 0 zombieCpu(s): 99.3%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.3%si, 0.3%stMem: 1017924k total, 887500k used, 130424k free, 85928k buffersSwap: 0k total, 0k used, 0k free, 351280k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2005 root 20 0 358m 71m 3208 R 99.3 7.2 83:44.47 test 2001 root 20 0 358m 71m 3208 S 0.3 7.2 0:08.66 test&2004 root 20 0 358m 71m 3208 S 0.3 7.2 0:19.61 test&1997 root 20 0 358m 71m 3208 S 0.0 7.2 0:26.24 test&1999 root 20 0 358m 71m 3208 S 0.0 7.2 0:00.06 test&2000 root 20 0 358m 71m 3208 S 0.0 7.2 0:00.00&test2002 root 20 0 358m 71m 3208 S 0.0 7.2 0:05.86 Server Listen(2 2003 root 20 0 358m 71m 3208 S 0.0 7.2 0:00.00 Server Accept(2
可得线程中CPU占有率最高的线程的PID是2005
使用gdb icdn 2005 命令
root@linuxidc:~# gdb icdn 2005GNU gdb (/Linaro 7.4-ubuntu2.1) 7.4-2012.04Copyright (C) 2012 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later &http://gnu.org/licenses/gpl.html&This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law. Type "show copying"and "show warranty" for details.This GDB was configured as "x86_64-linux-gnu".For bug reporting instructions, please see:&http://bugs.launchpad.net/gdb-linaro/&...icdn: No such file or directory.Attaching to process 2005
warning: process 2005 is a cloned processReading symbols from /home/linuxidc/test/snmptrapd...done.Reading symbols from /usr/lib/libnetsnmp.so.30...done.Loaded symbols for /usr/lib/libnetsnmp.so.30Reading symbols from /lib/x86_64-linux-gnu/libpthread.so.0...(no debugging symbols found)...done.[Thread debugging using libthread_db enabled]Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".Loaded symbols for /lib/x86_64-linux-gnu/libpthread.so.0Reading symbols from /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18...(no debugging symbols found)...done.Loaded symbols for /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18Reading symbols from /usr/local/lib/libstd.so...(no debugging symbols found)...done.Loaded symbols for /usr/local/lib/libstd.soReading symbols from /lib/x86_64-linux-gnu/libc.so.6...(no debugging symbols found)...done.Loaded symbols for /lib/x86_64-linux-gnu/libc.so.6Reading symbols from /lib/x86_64-linux-gnu/librt.so.1...(no debugging symbols found)...done.Loaded symbols for /lib/x86_64-linux-gnu/librt.so.1Reading symbols from /lib/x86_64-linux-gnu/libcrypto.so.1.0.0...(no debugging symbols found)...done.Loaded symbols for /lib/x86_64-linux-gnu/libcrypto.so.1.0.0Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.Loaded symbols for /lib64/ld-linux-x86-64.so.2Reading symbols from /lib/x86_64-linux-gnu/libz.so.1...(no debugging symbols found)...done.Loaded symbols for /lib/x86_64-linux-gnu/libz.so.1Reading symbols from /lib/x86_64-linux-gnu/libdl.so.2...(no debugging symbols found)...done.Loaded symbols for /lib/x86_64-linux-gnu/libdl.so.2Reading symbols from /lib/x86_64-linux-gnu/libm.so.6...(no debugging symbols found)...done.Loaded symbols for /lib/x86_64-linux-gnu/libm.so.6Reading symbols from /usr/local/lib/libudt.so...(no debugging symbols found)...done.Loaded symbols for /usr/local/lib/libudt.soReading symbols from /usr/lib/x86_64-linux-gnu/libstdc++.so.6...(no debugging symbols found)...done.Loaded symbols for /usr/lib/x86_64-linux-gnu/libstdc++.so.6Reading symbols from /lib/x86_64-linux-gnu/libgcc_s.so.1...(no debugging symbols found)...done.Loaded symbols for /lib/x86_64-linux-gnu/libgcc_s.so.1Reading symbols from /lib/x86_64-linux-gnu/libnss_files.so.2...(no debugging symbols found)...done.Loaded symbols for /lib/x86_64-linux-gnu/libnss_files.so.2execute_search () at test.c:310
从最后一行可知,线程2005运行的是execute_search这个函数,然后查看该函数,发现有这样一段
while(g_search_state == 1) {   tmp = g_data_list-&phead-&   if (tmp)   {     pthread_mutex_lock(&g_mysql_mutex);     res.result = search_mysql(tmp-&sn, &(res.machine));     pthread_mutex_unlock(&g_mysql_mutex);     snprintf(res.sn, sizeof(res.sn), "%s", tmp-&sn);   } }
由于tmp长期为NULL,所以这变成了一个while的死循环,而死循环极为占用内存,于是再下面加上usleep(50000),问题解决。
本文永久更新链接地址:
相关资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)我们的服务器在使用操作系统的时候,用着用着系统就变慢了,打开& 任务管理器 &一看,才发现CPU使用率达到80%以上。这是怎么回事情呢?遇到病毒了吗?硬件有问题?还是系统设置有问题呢?在本文中将从硬件,系统进程,应用软件和病毒木马四个方面来介绍CPU资源使用率为什么会达到那么高,以帮助大家排除服务器CPU使用率高的种种疑惑。
一、硬件因素
以下分别从CPU温度,CPU超线程,硬件配置,硬件驱动和待机方面分析。
情况1. CPU温度过高如果CPU风扇散热不好,会导致CPU温度太高(CPU温度多少正常?),使CPU自动降频,从而使CPU的性能降低。总之高温时CPU会自动将降低工作效率。
情况2. 超线程超线程导致CPU使用率占用高,这类故障的共同原因就是都使用了具有超线程功能的P4 CPU。据一些网友总结超线程似乎和天网防火墙有冲突,可以通过卸载天网并安装其它防火墙解决,也可以通过在BIOS中关闭超线程功能解决
情况3. 硬件配置不合理例如内存不足,当运行一些大型软件时,CPU的资源大部分耗在了虚拟内存的交换处理上。而电源功率不足,也会使CPU的性能难以发挥。还有,在购买CPU时,选的CPU核心频率不足是导致CPU的使用率高的最直接原因。
情况4. 不完善的驱动程序硬件的驱动程序没有经过认证或者是不合法的认证,会造成CPU资源占用率高。因大量的测试版的驱动在网上泛滥,造成了难以发现的故障原因。处理方式:尤其是显卡驱动特别要注意,建议使用微软认证的或由官方发布的驱动,并且严格核对型号、版本。
情况5. 待机经常使用待机功能,也会造成系统自动关闭硬盘DMA模式。这不仅会使系统性能大幅度下降,系统启动速度变慢,也会使是系统在运行一些大型软件时CPU使用率高。
二、系统进程因素
相对于硬件因素的影响,系统进程的异常也多为CPU资源使用率高的征兆。以下分别以Dllhost进程和Services进程的分析来剖析异常的原因以及解决办法。
情况1. Dllhost进程特征:服务器正常CPU消耗应该在75%以下,而且CPU消耗应该是上下起伏的,出现这种问题的服务器,CPU会突然一直处100%的水平,而且不会下降。查看任务管理器,可以发现是DLLHOST.EXE消耗了所有的CPU空闲时间,管理员在这种情况下,只好重新启动IIS服务,奇怪的是,重新启动IIS服务后一切正常,但可能过了一段时间后,问题又再次出现了。
直接原因:有一个或多个ACCESS数据库在多次读写过程中损坏,微软的MDAC系统在写入这个损坏的ACCESS文件时,ASP线程处于BLOCK状态,结果其它线程只能等待,IIS被死锁了,全部的CPU时间都消耗在DLLHOST中。
解决办法:安装&一流信息监控拦截系统&,使用其中的&首席文件检查官IIS健康检查官&软件,启用&查找死锁模块&,设置:&wblock=yes监控的目录,请指定您的主机的文件所在目录:&wblockdir=d:\test,监控生成的日志的文件保存位置在安装目录的log目录中,文件名为:logblock.htm
停止IIS,再启动&首席文件检查官IIS健康检查官&,再启动IIS,&首席文件检查官IIS健康检查官&会在logblock.htm中记录下最后写入的ACCESS文件的。
过了一段时间后,当问题出来时,例如CPU会再次一直处100%的水平,可以停止IIS,检查logblock.htm所记录的最后的十个文件,注意,最有问题的往往是计数器类的ACCESS文件,例如:&**COUNT.MDB&,&**COUNT.ASP&,可以先把最后十个文件或有所怀疑的文件删除到回收站中,再启动IIS,看看问题是否再次出现。我们相信,经过仔细的查找后,您肯定可以找到这个让您操心了一段时间的文件的。
找到这个文件后,可以删除它,或下载下来,用ACCESS2000修复它,问题就解决了。
情况2.Services进程症状:在基于 Windows 2000 的计算机上,Services.exe 中的 CPU 使用率可能间歇性地达到100 %,并且计算机可能停止响应(挂起)。出现此问题时,连接到该计算机(如果它是文件服务器或域控制器)的用户会被断开连接。您可能还需要重新启动计算机。如果 Esent.dll 错误地处理将文件刷新到磁盘的方式,则会出现此症状。
解决方案Service Pack 信息:要解决此问题,请获取最新的 Microsoft Windows 2000 Service Pack。有关其它信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:260910 如何获取最新的 Windows 2000 Service Pack修复程序信息:Microsoft 提供了受支持的修补程序,但该程序只是为了解决本文所介绍的问题。只有计算机遇到本文提到的特定问题时才可应用此修补程序。此修补程序可能还会接受其它一些测试。因此,如果这个问题没有对您造成严重的影响,Microsoft 建议您等待包含此修补程序的下一个 Windows 2000 Service Pack。要立即解决此问题,请与&Microsoft 产品支持服务&联系,以获取此修补程序。有关&Microsoft 产品支持服务&电话号码和支持费用信息的完整列表,请访问 Microsoft Web 站点:
注意 :特殊情况下,如果 Microsoft 支持专业人员确定某个特定的更新程序能够解决您的问题,可免收通常情况下收取的电话支持服务费用。对于特定更新程序无法解决的其它支持问题和事项,将正常收取支持费用。
下表列出了此修补程序的全球版本的文件属性(或更新的属性)。这些文件的日期和时间按协调通用时间 (UTC) 列出。查看文件信息时,它将转换为本地时间。要了解 UTC 与本地时间之间的时差,请使用&控制面板&中的&日期和时间&工具中的 时区 选项卡。状态:Microsoft 已经确认这是在本文开头列出的 Microsoft 产品中存在的问题。此问题最初是在 Microsoft Windows 2000 Service Pack 4 中更正的。
三、应用软件因素
一般大型的应用软件的运行会耗CPU和内存大量的资源,有时也会因一些网络配置不当从而使这些应用软件的性能得不到充分的发挥,从而导致的是耗资源而不见功效的现象。以下分别从杀毒软件,AVI视频文件,WORD文件以及网络配置方面讲述一些解决办法。
情况1.杀毒软件由于新版的KV、金山、瑞星都加入了对网页、插件、邮件的随机监控,无疑增大了系统负担。处理方式:基本上没有合理的处理方式,尽量使用最少的监控服务。而关闭这些相应的监控服务是解决这类问题的最直接办法。
情况2. AVI视频文件在Windows XP中,单击一个较大的AVI视频文件后,可能会出现系统假死现象,并且造成exploere.exe进程的使用率100%,这是因为系统要先扫描该文件,并检查文件所有部分,建立索引。如果文件较大就会需要较长时间并造成CPU占用率100%。解决方法:右键单击保存视频文件的文件夹,选择&属性&&常规&&高级&,去掉&为了快速搜索,允许索引服务编制该文件夹的索引&前面复选框的对钩即可。
情况3. WORD文件处理较大的Word文件时CPU使用率过高,这个问题一般还会造成电脑假死,这些都是因为WORD的拼写和语法检查造成的,只要打开WORD的&工具&选项&,进入&拼写和语法&选项卡,将其中的&键入时检查拼写&和&键入时检查语法&两项前面的复选框中的钩去掉即可。
情况4. 网络配置当你的Windows2000/xp作为服务器时,收到来自端口445上的连接请求后,系统将分配内存和少量CPU资源来为这些连接提供服务,当负荷过重,就会出现上述情况。要解决这个问题可以通过修改注册表来解决,打开注册表,找到HKEY&LOCAL&MACHNE\SYSTEM\CurrentControlSet\Services\lanmanserver,在右面新建一个名为&;maxworkitems&;的DWORD值.然后双击该值,如果你的电脑有512以上内存,就设置为&;1024&P;,如果小于512,就设置为256.总之,将这个值设置大一点能提高服务器的性能发挥。
四、病毒木马因素
出现CPU使用率高的故障经常是因为病毒木马造成的,比如大量的蠕虫病毒,它们会在系统内部迅速复制,造成CPU占用资源率居高不下。以下分别从震荡波蠕虫病毒和bride病毒介绍一些对应的解决办法。
情况1. 震荡波蠕虫病毒利用微软操作系统的LSASS缓冲区溢出漏洞进行远程主动攻击和传染,导致系统异常和网络严重拥塞,具有极强的危害性,病毒如果攻击成功,则会占用大量系统资源,使CPU占用率达到100%,出现电脑运行异常缓慢的现象。如果中了这种病毒可采用下面的四种方法进行清除。
1、断网打补丁如果不给系统打上相应的漏洞补丁,则连网后依然会遭受到该病毒的攻击,用户应该先下载相应的漏洞补丁程序,然后断开网络,运行补丁程序,当补丁安装完成后再上网。
2、清除内存中的病毒进程要想彻底清除该病毒,应该先清除内存中的病毒进程,用户可以按CTRL+SHIFT+ESC三或者右键单击任务栏,在弹出菜单中选择&任务管理器&打开任务管理器界面,然后在内存中查找名为&avserve.exe&的进程,找到后直接将它结束。
3、删除病毒文件病毒感染系统时会在系统安装目录(默认为C:\WINNT)下产生一个名为avserve.exe的病毒文件,并在系统目录下(默认为C:\WINNT\System32)生成一些名为&;随机字符串&;_UP.exe的病毒文件,用户可以查找这些文件,找到后删除,如果系统提示删除文件失败,则用户需要到安全模式下或DOS系统下删除这些文件。
4、删除注册表键值该病毒会在电脑注册表的HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Currentversion\Run项中建立名为&avserve.exe&,内容为:&%Windows%\avserve.exe&的病毒键值,为了防止病毒下次系统启动时自动运行,用户应该将该键值删除,方法是在&运行&菜单中键入&REGEDIT& 然后调出注册表编辑器,找到该病毒键值,然后直接删除。
情况2. bride病毒此病毒可以在Windows 2000、Windows XP等操作系统环境下正常运行,病毒运行时会释放出一个FUNLOVE病毒并将之执行,而FUNLOVE病毒会在计算机中大量繁殖,造成系统变慢,网络阻塞。病毒清除方法:此病毒可以用趋势、诺顿、瑞星、金山和江民等杀毒软件进行清除。
总之,用可靠的杀毒软件彻底清理系统内存和本地硬盘,并且打开系统设置软件,察看有无异常启动的程序。经常性更新升级杀毒软件和防火墙,加强防毒意识,掌握正确的防杀毒知识,能有效地防止病毒和木马的入侵。
阅读(...) 评论()服务器CPU使用率过高的处理
<span type="1" blog_id="1846835" userid='
分享到朋友圈
好的文章,和好友一起分享}

我要回帖

更多关于 cpu使用率突然变高 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信