apache httpd 占用cpu进程占大量cpu,原因该怎么查

Linux下某个进程CPU占用率高分析方法
在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况。这种情况发生时,我们怎么去找出原因并解决。 一般解决方法是通过top命令找出消耗资源高的线程id,利用str
在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况。这种情况发生时,我们怎么去找出原因并解决。
一般解决方法是通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用
1. 通过top命令找到可疑进程PID
top - 09:37:18 up 70 days, 16:29,
load average: 1.13, 1.04, 0.97
Tasks: 105 total,
1 running, 104 sleeping,
0 stopped,
0.0%ni, 93.6%id,
2067816k total,
1756680k used,
311136k free,
236340k buffers
524284k total,
255508k used,
268776k free,
277040k cached
SHR S %CPU %MEM
24138 apache
0 m 3668 S 103.3 19.0
1232:39 java
4:39.34 gam_server
5:06.63 httpd
19254 root
785m 221m 3176 S
9:04.36 java
1:22.46 init
0:00.00 kthreadd
0:33.42 ksoftirqd/0
0:00.03 kworker/u:0
从上面命令中可以看出java进程CPU利用率一直保持100%,稳居不下,找到PID 24138
2. 找出消耗资源最高的线程
top -H -p &24138 可以不用第一步,直接执行命令 top -H ,就可以查看到消耗资源最高的线程
top - 09:49:49 up 70 days, 16:41,
load average: 1.01, 1.04, 1.00
1 running,
71 sleeping,
0 stopped,
0.0%ni, 97.7%id,
2067816k total,
1760840k used,
306976k free,
236744k buffers
524284k total,
253344k used,
270940k free,
279092k cached
SHR S %CPU %MEM
24167 apache
0 m 3688 R 99.1 19.0
1169:43 java
24152 apache
0 m 3688 S
0:28.58 java
24188 apache
0 m 3688 S
4:56.69 java
24138 apache
0 m 3688 S
0:00.00 java
3. 查看这个线程所有系统调用
strace -p 24167
通过这3步基本可以找出什么原因导致java进程占用那么高CPU资源
转载请保留固定链接:
------分隔线----------------------------
fail2ban是由Python语言开发监控软件,通过监控系统日志(Debian/...
Linux在4.9版本的内核新增了一款TCP拥塞控制技术:BBR, Linode 最新...
概述 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支...
概述 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支...
一、使用背景 当生产环境有很多服务器、很多业务模块的日志需...
What is the opcode cache? When the interpreter to complete the analysis of script...如何查询占CPU高的oracle进程
字体:[ ] 类型:转载 时间:
oracle占用cpu过高怎么处理,本文将介绍有关oracle进程CPU占用率过高的问题,需要了解跟多的朋友可以参考下
oracle占用cpu过高怎么处理,本文将介绍有关oracle进程CPU占用率过高的问题,需要了解跟多的朋友可以参考下1:首先使用TOP命令传到占用CPU高的SPID号 PID USERNAME THR PRI NICE SIZE RES STATE TIME CPU COMMAND 3575 oracle 1 12 0 0K 0K run 748.6H 24.98% oracle 3571 oracle 1 22 0 0K 0K sleep 706.2H 22.84% oracle 2:使用DBA账户登录数据库,使用以下SQL语句查询: SELECT * FROM V$PROCESS WHERE spid=3575;查询到SQL相关信息 3:根据以上查询到的信息使用以下SQL查询: SELECT sid, program FROM V$SESSION S WHERE EXISTS(SELECT 1 FROM V$PROCESS WHERE spid=3575 AND ADDR = S.PADDR); 可以查询到具体那个客户端查询一直在不断占用ORACLE资源! 最后对这个查询进行处理! 4.根据SID查得SQLITPUB
代码如下: select sql_textITPUB from v$sqltext where a.hashvalue=(select sql_hash_value from v$session b where b.SID='&sid') 0order by piece ASC;
根据lockwait字段可以查询当前正在等待的锁的相关信息:
代码如下: select * from v$lock where kaddr in (select lockwait from v$session where sid= $sid); (sql_address,sql_hash_value),(prev_sql_addr,prev_hash_value) 根据这两组字段, 可以查询到当前session正在执行的或最近一次执行的sql语句的详细信息: select * from v$sqltext where address = &sql_address and hash_value = &sql_hash_
根据PID查SQL相关信息:
代码如下: select id,serial# ,username,osuser,machine,program,process,to_char(logon_time,'yyyy/mm/dd hh24:mi:ss') logon from v$session where paddr in ( select addr from v$process where spid in('&pid'));
根据PID查SQL语句
代码如下: SELECT a.username,a.machine,a.program,a.sid,a.serial#,a.status,c.piece,c.sql_text FROM v$session a,v$process b,v$sqltext c WHERE b.spid='&spid' AND b.addr=a.paddr AND a.sql_address=c.address(+) ORDER BY c.
得到进程的sid号:
代码如下: select id,serial# ,username,osuser,machine,program,process,to_char(logon_time,'yyyy/mm/dd hh24:mi:ss') logon from v$session where paddr in ( select addr from v$process where spid in('&pid'));
得到session的sqltext语句:
代码如下: select sql_text from v$sqltext_with_newlines where hash_value in (select SQL_HASH_VALUE from v$session where paddr in (select addr from v$process where spid= '&pid'))
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具<span class="vote-count" id="a_vote_count_
看下apache的日志,看样子像某个地方死循环了。
分享您的问题
以后才能回答,未注册用户请先2009年7月 总版技术专家分月排行榜第二2009年3月 总版技术专家分月排行榜第二2009年1月 总版技术专家分月排行榜第二2005年7月 总版技术专家分月排行榜第二2005年5月 总版技术专家分月排行榜第二2005年3月 总版技术专家分月排行榜第二
优秀小版主2015年8月优秀小版主2015年9月优秀小版主2015年5月优秀小版主2015年2月论坛优秀版主
2006年2月 PHP大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 httpd进程 的文章

 

随机推荐