孤独酒馆|6000+字,30+张图。JAVA线上故障排查全套路总结( 二 )


孤独酒馆|6000+字,30+张图。JAVA线上故障排查全套路总结更多时候 , 磁盘问题还是性能上的问题 。 我们可以通过iostatiostat -d -k -x来进行分析
孤独酒馆|6000+字,30+张图。JAVA线上故障排查全套路总结最后一列%util可以看到每块磁盘写入的程度 , 而rrqpm/s以及wrqm/s分别表示读写速度 , 一般就能帮助定位到具体哪块磁盘出现问题了 。
另外我们还需要知道是哪个进程在进行读写 , 一般来说开发自己心里有数 , 或者用iotop命令来进行定位文件读写的来源 。
孤独酒馆|6000+字,30+张图。JAVA线上故障排查全套路总结不过这边拿到的是tid , 我们要转换成pid , 可以通过readlink命令来找到pid:readlink -f /proc/*/task/tid/../.. 。
孤独酒馆|6000+字,30+张图。JAVA线上故障排查全套路总结找到pid之后就可以看这个进程具体的读写情况cat /proc/pid/io
孤独酒馆|6000+字,30+张图。JAVA线上故障排查全套路总结我们还可以通过lsof命令来确定具体的文件读写情况lsof -p pid
孤独酒馆|6000+字,30+张图。JAVA线上故障排查全套路总结内存内存问题排查起来相对比CPU麻烦一些 , 场景也比较多 。 主要包括OOM、GC问题 和 堆外内存 。 一般来讲 , 我们会先用free命令先来检查一发内存的各种情况 。
孤独酒馆|6000+字,30+张图。JAVA线上故障排查全套路总结堆内内存内存问题大多还都是堆内内存问题 。 表象上主要分为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对线程的限制
孤独酒馆|6000+字,30+张图。JAVA线上故障排查全套路总结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以前的永久代了) 。


推荐阅读