孤独酒馆|6000+字,30+张图。JAVA线上故障排查全套路总结( 二 )
更多时候 , 磁盘问题还是性能上的问题 。 我们可以通过iostatiostat -d -k -x来进行分析
最后一列%util可以看到每块磁盘写入的程度 , 而rrqpm/s以及wrqm/s分别表示读写速度 , 一般就能帮助定位到具体哪块磁盘出现问题了 。
另外我们还需要知道是哪个进程在进行读写 , 一般来说开发自己心里有数 , 或者用iotop命令来进行定位文件读写的来源 。
不过这边拿到的是tid , 我们要转换成pid , 可以通过readlink命令来找到pid:readlink -f /proc/*/task/tid/../.. 。
找到pid之后就可以看这个进程具体的读写情况cat /proc/pid/io
我们还可以通过lsof命令来确定具体的文件读写情况lsof -p pid
内存内存问题排查起来相对比CPU麻烦一些 , 场景也比较多 。 主要包括OOM、GC问题 和 堆外内存 。 一般来讲 , 我们会先用free命令先来检查一发内存的各种情况 。
堆内内存内存问题大多还都是堆内内存问题 。 表象上主要分为OOM和StackOverflow 。
OOMJMV中的内存不足 , OOM大致可以分为以下几种:
Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread这个意思是没有足够的内存空间给线程分配java栈 , 基本上还是线程池代码写的有问题 , 比如说忘记shutdown , 所以说应该首先从代码层面来寻找问题 , 使用jstack或者jmap 。 如果一切都正常 , JVM方面可以通过指定Xss来减少单个thread stack的大小 。 另外也可以在系统层面 , 可以通过修改/etc/security/limits.confnofile和nproc来增大os对线程的限制
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space这个意思是堆的内存占用已经达到-Xmx设置的最大值 , 应该是最常见的OOM错误了 。 解决思路仍然是先应该在代码中找 , 怀疑存在内存泄漏 , 通过jstack和jmap去定位问题 。 如果说一切都正常 , 才需要通过调整Xmx的值来扩大内存 。
Caused by: java.lang.OutOfMemoryError: Meta space这个意思是元数据区的内存占用已经达到XX:MaxMetaspaceSize设置的最大值 , 排查思路和上面的一致 , 参数方面可以通过XX:MaxPermSize来进行调整(这里就不说1.8以前的永久代了) 。
推荐阅读
- 孤独酒馆|NVIDIA 助力文远知行在自动驾驶的路上“乘风破浪”
- 孤独酒馆|日本研究机构拆解华为P30 Pro:美企零部件比例不到1%
- 泽宇讲历史|女儿做了外国皇后,不愿向日本求助,49岁孤独去世,父亲是华人
- 环球网|“世界上最孤独的大象”被解救,曾被关了整整35年
- 新鲜事儿|却被渣男抛弃终身不孕,而今孤独一人,她是80年代最火的“琼瑶女郎”
- “世界上最孤独的大象”被解救,曾被关了整整35年
- 世界上最孤独的大象被解救:“世界上最孤独的大象”被解救,曾被关了整整35年
- kaavan|从小被当赚钱工具,35年后,世界上最孤独的大象终于解放了……
- 「孤独」九月,好好生活,好好爱
- 灵魂伴侣|当偶像有多孤独?“韩国最美的男人”38岁改变形象,曾经的灵魂伴侣已转嫁他人
