linux cpu占用率很高

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux cpu占用率很高相关的知识,希望对你有一定的参考价值。

VPS不稳定,网站访问缓慢甚至502错误
登录VPS,同TOP查看,发现CPU占用率一直都很高,没事就50%以上,甚至90%
请看截图

请问这是什么原因?
之后我用ps -ef|grep 2948查看进程:
[root@localhost ~]# ps -ef|grep 2948
lu_mysql 2948 2833 18 Dec11 ? 09:32:07 /usr/local/mysql/libexec/mysqld --b asedir=/usr/local/mysql --datadir=/home/mysql_data --user=lu_mysql --log-error=/hom e/mysql_data/localhost.err --pid-file=/home/mysql_data/localhost.pid --socket=/tmp/ mysql.sock --port=3306
root 6384 32755 0 21:12 pts/0 00:00:00 grep 2948

因为发现很多php-CGI进程
所以查看他们,得到的结果都很类似:
[root@localhost ~]# ps -ef|grep 5801
zijidelu 5801 7584 5 20:46 ? 00:01:53 /usr/local/php_fcgi/bin/php-cgi --fpm --fpm-config /usr/local/php_fcgi/etc/vhost/9000.conf
root 6504 32755 0 21:19 pts/0 00:00:00 grep 5801

请问我该如何把CPU占用率降下来?
很抱歉,我没多少分,全给了

我觉得应该是php程序的问题,单个php-cgi的cpu占用率好像没这么高。给php安装了加速插件了吗?可以试试关掉xdebug插件,清除一下php的缓存,看能否改善? 参考技术A 很明显你的cpu高的原因都是那一个用户造成的。。把那个用户运行的程序关掉就行了啊追问

那个用户是管理软件啊
LUmanager
我设置VPS就是用它设置,可以关掉它吗?

追答

那你有特别应用。。cpu占用自然就好高了点了啊,只要和你平常的参数其他的都正常。高点也无妨的。

另外我想说。。你说网站访问缓慢甚至502错误
这个是跟你的数据库里面键的表有很大的关系。。优化的不太好。。建议整理一下啊

参考技术B 关注,我也经常遇见。
把不用的服务给关了,是不是代码有很慢的sql追问

说实在的,我根本不知道什么服务不需要,你指点一下吧

追答

你这%90,我经常遇见200多%的,都是mysqld的。也没办法
你看下uptime,负载高不高。网站老挂,是不是有比较不好的sql在代码里。或者看下你装的那些版本,是不是有点老。(我只是建议的说说,让我自己弄,我也不会,呵呵)
一般mysql负载高,重启下,就会下来。但这不是长久之计。
还有我看你的截图,mysql,php的进程的优先级貌似不高。是0,还有不少别的进程是负数,不知道有关系没

参考技术C 优化MySQL,你的内存有512m,但是还有130m剩余,但是同时你的SWAP却用了184M,
我的建议是修改mysql配置文件,优化缓存大小和连接数连接方式,优化你的sql语句
我记得mysql好像是有工具可以查看最占用资源的sql语句,找到他,优化他。
如果优化后你的主机负载还是很高,建议升级硬件。主要是升内存和用更快的磁盘整阵列。
如果升级硬件还是不行,建议搭建mysql同步集群,分散访问压力。本回答被提问者采纳
参考技术D 你运行了什么程序啊?追问

SHOPEX 4.85网店程序

windows下揪出java程序占用cpu很高的线程

1.找到java进程对应的pid。通过任务管理器。linux---top

2.然后把java进程导出快照。直接运行命令。stack -l 31372 > c:/31372.stack  

3.在windows下只能查看进程的cpu占用率,要查看线程的cpu占用率要借助其他的工具,我这里用的是微软提供的 Process Explorer v15.3

                                                                                                    右键点击需要查看的进程---properties 

linux下先输入top,然后再按shift+h 或“H”,此时打开的是线程视图,pid为线程号

4.然后选择 Threads 选项卡,找到占用cpu的线程的tid,比如我这里是 31876 的线程

5.把pid转换成16进制,我这里直接用系统自带的计算器转换,置于为什么要转换,是因为先前用jstack导出的信息里面线程对应的tid是16进制的。

cmd---calc---计算器左上角选择程序员,可进制转换 。最后得到的线程pid的16进制的值为 7C84 

6.在 c盘的31372.stack文件中查找 7C84

Thread-23" prio=6 tid=0x03072400 nid=0x1b68 runnable [0x0372f000]  

   java.lang.Thread.State: RUNNABLE  

   at com.horn.util.MyEncrypt.encode(MyEncrypt.java:17)  

 at com.horn.common.OrderUtil.hisExp(OrderUtil.java:228)  

 at com.horn.util.MsgManage.receiveMsg(MsgManage.java:961)  

   at com.horn.util.PollMessageThread.run(PollMessageThread.java:74)  

   Locked ownable synchronizers:      - None  

以上是关于linux cpu占用率很高的主要内容,如果未能解决你的问题,请参考以下文章

[转帖]Java性能检测工具-记录一次通过jstack排查Linux服务器CPU占用率很高的实践

Java内存CPU占用率过高

linux服务器CPU占用率800%左右...

如何查看 android 线程 cpu占用率

linux查看cpu占用率

解决 Windows 资源管理器 CPU 占用率很高的问题