线上Java问题,从定位到解决

一个线上的问题是如何从定位到解决的?

设计埋点

埋点就是你要监控啥,你必须在程序开启时设置一些参数来辅助监控,例如把日志输出到哪里,便于另外的监控系统监控。

例如 -XX:+PrintGCDetails -Xloggc:/home/xx.log 形成的LOG文件

启动参数

nohup java ${DEBUG_OPTS} ${JAVA_OPTS} -jar ${WORK_DIR}/abc-1.0-release.jar >/dev/null 2>&1 &

日志参数

出现问题难道不应该是先看日志?

哈哈,这就要看你的日志打印的详不详细了。。。

发现问题

监控软件报警

响应变慢

服务不可用

定位问题

1,cpu

top  打头阵

jstack -lF pid

线程状态信息,包含锁信息

jmap -dump:format=b,file=/usr/local/logs/gc/dump.hprof {pid}

下载内存信息

MAT

发现占用内存的大对象

2,磁盘

iostat -m 1 10

每块磁盘的读写速度

3,内存

jmap -heap pid

打印jvm信息(具体含义,不是-Xx..)

Mat

4,网络

netstat -p 

5,jvm

jps -lvm | grep pid

输出完整包名主类名和jvm参数信息

jinfo -flag name(=value)

打印/设置参数名称,但是部分参数不支持设置

jstat -gc pic

打印gc信息

解决问题

修改程序

提升单机硬件资源

网络问题

大杀器:Arthas

阿里出品,必属精品

https://alibaba.github.io/arthas/index.html

大家都说好,谁用谁知道,墙裂推荐!

附录

jvm参数信息:

-Xms:初始堆大小,默认为物理内存的1/64(<1GB);默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制
-Xmx:最大堆大小,默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制
-Xmn:新生代的内存空间大小,注意:此处的大小是(eden+ 2 survivor space)。与jmap -heap中显示的New gen是不同的。整个堆大小=新生代大小 + 老生代大小 + 永久代大小。在保证堆大小不变的情况下,增大新生代后,将会减小老生代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-XX:SurvivorRatio:新生代中Eden区域与Survivor区域的容量比值,默认值为8。两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10。
-Xss:每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。应根据应用的线程所需内存大小进行适当调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。一般小的应用, 如果栈不是很深, 应该是128k够用的,大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。和threadstacksize选项解释很类似,官方文档似乎没有解释,在论坛中有这样一句话:"-Xss is translated in a VM flag named ThreadStackSize”一般设置这个值就可以了。
-XX:PermSize:设置永久代(perm gen)初始值。默认值为物理内存的1/64。
-XX:MaxPermSize:设置持久代最大值。物理内存的1/4。

 

-XX:+HeapDumpOnOutOfMemoryError 打印oom信息

 

 

线程状态信息:

NEW:未启动的。不会出现在Dump中。

RUNNABLE:在虚拟机内执行的。运行中状态,可能里面还能看到locked字样,表明它获得了某把锁。

BLOCKED:受阻塞并等待监视器锁。被某个锁(synchronizers)给block住了。

WATING:无限期等待另一个线程执行特定操作。等待某个condition或monitor发生,一般停留在park(), wait(), sleep(),join() 等语句里。

TIMED_WATING:有时限的等待另一个线程的特定操作。和WAITING的区别是wait() 等语句加上了时间限制 wait(timeout)。

TERMINATED:已退出的。
 

有用的参考文章:

https://www.cnblogs.com/java-chen-hao/p/10654071.html

https://www.cnblogs.com/mfmdaoyou/p/7349117.html?spm=a2c4e.10696291.0.0.297b19a4YDnKng

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章