Java问题处理思路

生产环境处理问题小结:

顺着上边的思路,我回家看了一些资料,资料表明当性能出现问题的时候无外乎从四个大的方面入手:CPU、内存、文件IO、网络IO

我们可以使用TOP命令可以来分析当前CPU使用情况。在TOP中分别有:ussywahi4个指标,这4个指标分别代表是:

1、 cpu:应用消耗,当us高的时候一般是我们代码问题,比如代码中出现了象这次故障的死循环,或许还有可能是纯粹计算或者FullGC遇成。

2、  sylinux系统消耗,当sy高时证明系统在花大量时间做线程切换,证明我们Java应用中启动了大量线程,并且这些线程都处于阻塞状态和执行状态的切换过程(锁等待、IO等待)

3、  wa:代表的是IO等待,当wa高可能是由系统或者应用造成,应用造成wa高一般是由多个线程同时对一个文件进行大量写入,或者是磁盘本身就有问题了,还有一种情况是写入的文件本身非常大等造成的。

4、  hi:硬件中断造成的,例如网卡接收数据频繁。

网络IOJava在网络通信时,一般会先将对象序列化为字节流,进行发送,或者是接收字节流并反序列化,这个过程要消耗JVM的堆内存,按资料上的意思是JVM的堆内存大小是有限的,所以一般不会造成网络IO的严重消耗。

以上几种情况 ,我们都可以借助Jstack工具把JVM的线程给Dump出来,可以分析那些线程在等待,那些线程在IO读写,那些线程在死循环。

                            还有一些其它的工具可以帮助我们详细的分析这些状况:pidstatiostatsar jmap

当出现问题的时候,我们可以根据某一个指标的数值去有方向的定位问题。

参考资料:毕玄的分布式Java应用 第五章,书上写的比较详细,并且有实际案例性能调优,大家有时间可以详细看一下。

猜你喜欢

转载自tbstone.iteye.com/blog/1902747