天天看点

【Java面试】生产环境服务器变慢,如何诊断处理?#java面试

作者:Tom弹架构

生产环境服务器变慢,如何诊断处理?

JAVA面试题解析:我们的生产环境服务器变慢,怎么去诊断处理?这个问题我从三个维度给大家来做一个分析。因为服务器变慢无非就是比如说内存、内存不够,比如说CPU,还有就是磁盘的10,磁盘读写的效率变慢。那么可以分别从这几个维度做一个分析。

首先来看CPU,CPU过高或者CPU过低都会影响到程序的执行处理效率,CPU的利用率过高。那说明CPU的服务器处理的指令比较多,这个时候CPU就会忙不过来,自然它的效率就会下降。反馈到用户身上,就是觉得程序变慢了。

【Java面试】生产环境服务器变慢,如何诊断处理?#java面试

给大家研制了一份JAVA程序员的求职突击手册,包含简历模板、面试突击压题,一周的技术提升,以及JAVA提升的完整学习路线。

代表作品:《Sprin在我视频煮叶多,扣"求分享,一册在手保你高薪无忧。

针对这么一个问题,可以使用一些系统的命令,可以先去查询占用CPU过高的进程,通过进程去定位到这个进程中比较活跃的线程。当然这个也可以通过我们的jstack命令去打印出来当前这个线程的快照,然后可以根据快照的日志去排查具体的问题代码。

【Java面试】生产环境服务器变慢,如何诊断处理?#java面试

如果利用这么一个日志,我们就可以去定位到具体的某一行。如果说CPU利用率过低,说明CPU利用率过低,程序资源使用不够,可以去增加线程的数量,去提高性能。

【Java面试】生产环境服务器变慢,如何诊断处理?#java面试

在程序运算过程中,我们还有一个情况就是可能涉及到一些磁盘的I0操作,比如AVA里面包括磁盘本身的一些特性。这个时候我们怎么去优化?可以通过一个Linux命令,比如说I0 stat,10的状态命令,可以去查看磁盘的负载,去做一些优化。我们可以去借助一些系统的缓存,修改程序去减少磁盘的一个10次数,然后用顺序写入去替代随机写入,就减少寻址的开销。

【Java面试】生产环境服务器变慢,如何诊断处理?#java面试

比如说我们可以使用直接内存,m'm 替代read/write的操作,也可以去减少一些用户拷贝的次数。另外系统10的瓶颈,通过CPU和负载的非线性关系,可以体现出来。

比如说当负载增大的时候,系统吞吐量不能有效的增大,CPU就不能线性的增长,可能是10出现阻塞。一旦涉及到10操作去关注一下它的一个是否有释放,通过内存的合理使用,去减少应用,对磁盘直接IO的频次,去减少对网络10的操作频次,从而去提升我们IO的性能。

【Java面试】生产环境服务器变慢,如何诊断处理?#java面试

如果说能通过缓存解决的,我们就可以尽量的去通过这个缓存,比如说Java的内存,JVM的内存分配,要合理的去分配JVM的一个内存,去合理的去避免。我们的YoungGC和FullGC的一个产生。内存使用频率较高的时候,我们可以使用dump观察,然后也可以借助一下工具去分析,去找出大对象,还有占用最多的一些对象,排查是否存在一些内存泄露的问题。

【Java面试】生产环境服务器变慢,如何诊断处理?#java面试

然后也可以去分析我们的堆内存的文件,也可以去考虑一下。比如说因为堆内存被大量使用,从而导致出现一些问题。这个时候我们就需要借助一些系统的一些指令,去根据进程去查询出内存的分配。

如果说CPU和内存使用的频次都正常,这个时候就需要进一步去观察GC的日志,然后去通过分析用户的线程的暂停时间。然后各个部分的内存的区域的一个GC次数和一些时间等等这些指标。就可以去分析。如果说内存不够,这个时候进行一个参数调优,从而去更加合理的去使用。

【Java面试】生产环境服务器变慢,如何诊断处理?#java面试

我们的垃圾收集器去解决问题。基于以上的这么一个分析,我们可以总结一下,第一个是CPU的利用率。第二个是磁盘的I0效率。第三个是JVM的一个内存的管理。