| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> JVM记一次CPU飙升 -> 正文阅读 |
|
[Java知识库]JVM记一次CPU飙升 |
1.问题现象
2.问题分析通过top –Hp PID查看使用CUP最高的线程的PID
PID 20032使用率最高,是java程序,为了了解系统发生了什么使用jstack输出堆栈信息
通过printf将十进制数 20032转为十六进制数得到4f22,在输出的堆栈信息pid20032.txt中搜索4f22线程工作内容,发现线程一直在做查询操作
分析对应的程序代码发现本应该按照用户id查询的dao处理.缺少了条件拼接造成查询所有用户的信息.因此在内存中创建了大量用户占用信息对象 3.问题原因合并代码的时候, 查询条件缺失限制条件。 在开发环境中数据量和很小,问题并不明显, 测试环境使用的数据库是省级,数据量为千万级,因此问题十分明显 ?4.经验教训1. 输入堆转储文件的时候没有考虑到文件大小 内存占用很大,最先想到的是通过JVM 参数-XX:+HeapDumpOnOutOfMemoryError可以让JVM在出现内存溢出时候Dump出当前的内存转储快照。因此修改JBOSS_HOME/bin/run.conf 文件,修改JVM属性-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/starboss/heapdump(如下)
-XX:+HeapDumpOnOutOfMemoryError参数表示当JVM发生OOM时,自动生成DUMP文件。 -XX:HeapDumpPath=${目录}参数表示生成DUMP文件的路径,也可以指定文件名称,例如:-XX:HeapDumpPath=${目录}/java_heapdump.hprof。如果不指定文件名,默认为:java_<pid>_<date>_<time>_heapDump.hprof‘ 因为没有考虑到系统配置的是10g内存, 生成的堆转储文件大小为15g, 这么大的文件使用?Memory Analyzer或者?jmap命令都无法解析文件,直接抛出内存溢出异常 :( 2. jstack命令的时候报错Unable to open socket file
? 了解这个异常首先要了解jstack命令是如何执行的和? Linux tmp文件夹 ? Linux tmp文件夹中会保存一些文件
??Java程序启动后默认会在 /tmp/hsperfdata_{user_name}的目录下创建一个以PID为文件名的新文件,? 并在该文件中存储jvm运行的相关信息, jmap,jstack 等工具会读取 /tmp/hsperfdata_{user_name} 下的 pid 文件获取连接信息 所以出现Unable to open socket file问题可能有两种情况引起
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 19:26:51- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |