记一次内存溢出java.lang.OutOfMemoryError: unable to creat-阿里云开发者社区

开发者社区> 开发与运维> 正文

记一次内存溢出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,如需转载请自行联系原作者

版权声明:本文首发在云栖社区,遵循云栖社区版权声明:本文内容由互联网用户自发贡献,版权归用户作者所有,云栖社区不为本文内容承担相关法律责任。云栖社区已升级为阿里云开发者社区。如果您发现本文中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,阿里云开发者社区将协助删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章