Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1106424
  • 博文数量: 143
  • 博客积分: 969
  • 博客等级: 准尉
  • 技术积分: 1765
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-30 12:09
文章分类

全部博文(143)

文章存档

2023年(4)

2021年(2)

2020年(4)

2019年(4)

2018年(33)

2017年(6)

2016年(13)

2014年(7)

2013年(23)

2012年(33)

2011年(14)

我的朋友

分类: 系统运维

2020-06-16 11:57:04

     最近线上有个java服务,启动的时候限制堆内存为512M,但当运行一段时间后,使用内存达到512M报io.netty.util.internal.OutOfDirectMemoryError: failed to allocate 16777216 byte(s) of direct memory (used: 520093703, max: 536870912),服务不能正常工作,初步怀疑内存泄漏导致。临时解决方案,先写脚本检查内存是否达到512M,达到512M重启进程。
具体脚本如下:


点击(此处)折叠或打开

  1. file=test.log
  2. #1、查找进程,获取进程id
  3. ret=`ps -ef |grep sa-test | grep -v grep`
  4. #echo $ret
  5. pid=`echo $ret|awk '{print $2}' `
  6. #echo $pid
  7. #2、获取进程堆内存信息
  8. jmap -heap $pid |grep -E "capacity|used" |grep = >$file
  9. {
  10. # 读取一行内容,并将读取的内容存入变量line1中
  11. read line1
  12. # 读取一行内容,并将读取的内容存入变量line2中
  13. read line2
  14. # 将这个代码块的标准输入指向变量file的值所代表的的文件
  15. } < $file

  16. echo $line1;
  17. echo $line2;
  18. total=`echo $line1|awk '{print $3}'`
  19. used=`echo $line2|awk '{print $3}'`
  20. echo $total $used
  21. val=`expr $total - $used`
  22. diff=10485760
  23. #3、比较剩余内存是否小10M
  24. if [ $val -lt $diff ]
  25. then
  26. echo 'restart'
  27. cd /sa-test
  28. sh sa-test-jar.sh restart
  29. else
  30. echo 'ok'
  31. fi


阅读(10096) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~