记一次内存溢出java.lang.OutOfMemoryError: unable to creat

1、事发
刚好在外干活,开发着急上线,就远程进行上线,过程中发现tomcat出现大量异常日志。
2、报错日志
java.lang.OutOfMemoryError: unable to create new native thread
3、原因:得知市场部门正在推广app
4、直接去看接口并发以及数据库监控,发现接口并发连接数峰值在2500左右,全站应用日志都在报错,就猜到了又是数据库出现了瓶颈,结果发现是一台从库cpu100%导致所有查询都吭住了。明明两台从库可是请求大多数都在了第二台从库上,告知市场部情况并要求暂时停止推广,开发修改代码将部分应用手工指定连接到第一台从库上,问题得到解决。
最开始以为是并发过大导致的应用内存溢出,就做了一些关于进程的线程数量查询,以下是记录:
pstree -p ps -ef | grep story-wap|grep -v grep | awk '{print $2}' | wc -l
查看story-wap进程的线程数量(如果story-wap过滤不出来会统计系统所有的线程数量)
pstree -p ps -ef | grep story-app|grep -v grep | awk '{print $2}' | wc -l
pstree -p ps -ef | grep story-back|grep -v grep | awk '{print $2}' | wc -l
Linux下查看某个进程的线程数量
有些时候需要确实进程内部当前运行着多少线程,那么以下几个方法值得一用。

1.根据进程号进行查询:

pstree -p 进程号

top -Hp 进程号

2.根据进程名字进行查询:

pstree -p ps -e | grep server | awk '{print $1}'

pstree -p ps -e | grep server | awk '{print $1}' | wc -l

这里利用了管道和命令替换,
关于命令替换,我也是今天才了解,就是说用括起来的命令会优先执行,然后以其输出作为其他命令的参数,<br/>上述就是用 ps -e | grep server | awk '{print $1}' 的输出(进程号),作为 pstree -p 的参数<br/>管道和命令替换的区别是:<br/>管道:管道符号"|"左边命令的输出作为右边命令的输入<br/>命令替换:将命令替换符""中命令的输出作为其他命令相应位置的参数

参考
http://www.cnblogs.com/myshare/p/5177135.html

kill -9 ps -ef |grep story-app|grep -v grep|awk '{print $2}'
kill -9 ps -ef |grep story-back|grep -v grep|awk '{print $2}'
kill -9 ps -ef |grep story-wap|grep -v grep|awk '{print $2}'










本文转自 天乐 51CTO博客,原文链接:http://blog.51cto.com/tianlegg/2054112,如需转载请自行联系原作者
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值