• JAVA本地环境启动OOM问题排查


    1.问题描述

    每次启动信息报错如下:

    screenshot

    2.排查过程

    2.1起初怀疑是堆内存不够:

    将本地队内存调整由-Xms512M,-Xmx1024M,改成与测试环境相同1536M,还是失败

    screenshot

    如上图报错中有notify问题,怀疑notify启动占用线程数过多,增加如下线程限制:
    screenshot

    后进行重启测试,发现还是启动报错,排除notify问题

    2.2后续怀疑是线程空间占用过大

    调整xss 128k
    screenshot

    一般说来,Stack Space为128K是够用的。不过既然报错按照160k进行更改,直接报错如下

    screenshot

    栈空间溢出。。。放弃此路。。

    2.3既然自己机器不行,试试别人机器以及日常环境

    日常环境ok,同事eclipse ok (Windows),同事 idea 启动失败(mac)

    比较奇怪。。要不要放弃idea。。后排查eclipse启成功以及日常成功原因

    日常环境:ulimit -u 显示:131072
    mac环境:ulimit -u 显示:709

    注: ulimit -u由此可以看出最大线程数差异,也理解了为何mac启动cannot create native thread

    备注:可以进行修改,但是根本原因没找到,因此未进行调整
    ulimit -u 65535 命令或者直接修改limits.conf文件,将max user process参数修改为65535。

    2.4启动后加入HeapDumpOnOutOfMemoryError

    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp

    并没有任何日志。。。。

    3 问题再次思考:到底多少内存,才能合适的创建最多的线程,保证线程够用?

    screenshot

    有了以上理论支撑,因此不是堆内存调的越大越好


    3 换个思路从头再来

    idea 装入java virtualvm插件

    http://www.oschina.net/translate/setting-up-visualvm-in-under-5-minutes

    screenshot

    screenshot

    真相大白。。。DTS起了1800左右线程。。。

    `后沟通dts负责同学,因是并行计算job 执行频率高老的版本没有进行好的线程回收,否则线上也可能会有OOM

    因此需要dts版本升级,目前最稳定版本1.6.3`

    总结

    花了一定精力排查,环境各种折腾jdk升级、tomcat升级,差点从idea转成eclipse,终于水落石出建议对dts进行升级,避免线上带来不必要的麻烦

  • 相关阅读:
    Google Chart API 阮一峰的网络日志
    PHP随机函数【上】
    php实现socket推送技术
    javascript变量作用域
    如何使用jqplot描绘一个简单的线形图?
    培训小记
    Google自己的浏览器GoogleChrome
    这大半年的回顾
    一个高手的SQL求工作天数的函数
    关于TSQL中数据库重命名
  • 原文地址:https://www.cnblogs.com/jiangjun-x/p/8109194.html
Copyright © 2020-2023  润新知