当前位置: 首页 > 科技观察

面试官:生产服务器变慢了,你能谈谈诊断思路吗

时间:2023-03-20 17:31:59 科技观察

面试官:生产服务器变慢了,能谈谈诊断思路吗?转载本文请联系Java极客技术公众号。面试官问了这个问题,我能说不行吗?生产服务器变慢了,一般从这几点分析:服务器整体情况,CPU使用率,内存,磁盘,磁盘IO,网络IO一一顶上看服务器整体使用情况,通常是top命令是用来固定img的我知道大家看到这张图的时候一定有点懵,尤其是一个一个的数字,这些是什么?阿粉带你一行一行看第一行:系统时间、运行时间、登录终端数、系统负载(三个值分别是1分钟、5分钟、15分钟内的平均值,以及值越小,负载越低)第2行:进程总数、运行进程数、休眠进程数、停止进程数、僵尸进程数。一般来说,只要没有死进程,问题不大。第3行:用户占用资源百分比、系统内核占用资源百分比、优先级已更改的进程资源百分比、空闲资源百分比等。第4行:总物理内存、空闲内存、memoryusage,memoryusedaskernelcache第5行:totalvirtualmemory,freevirtualmemory,virtualmemoryusage,memorythathasbeenadvancedloaded这6行主要看PID和COMMAND这两个参数,其中PID是进程ID,COMMAND是要执行的命令。可以看到前面两个进程都是java进程。在当前界面下,按数字键盘1可以查看各个CPU的详细使用情况vmstat如果想知道CPU的使用情况,常用的命令是vmstat。一般vmstat工具的使用是通过两个数值参数来完成的。第一个参数是以秒为单位的采样间隔,第二个参数是采样次数。阿芬这次的命令是:vmstat-n32意思是每3秒采样一次,一共采样2次,主要关注procs和cpuprocs这两个参数:r:正在运行和等待的进程数CPU时间片,一般来说整个系统的运行队列不要超过总核数的2倍,否则系统压力太大b:等待资源的进程数,比如等待磁盘IO,网络IO这样的cpu:us:用户进程消耗CPU时间的百分比,如果us的值高,说明用户进程消耗CPU时间比较长,如果长时间大于50%,说明意味着程序还有待优化free用于查看free的内存状态。它主要有三个命令:freefree-gfree-m。粉丝推荐free-m。为什么呢,看看他们各自的运行结果就知道img其中:freecommand的运行结果很不友好。如果你看到3880324,你能快速告诉我它有多大吗?命令free-g四舍五入,给的内存明明是4G,但是你用free-g查了一下,结果是3G?请问?网上环境有问题,你说吧是因为内存不够。运维说,我不会背这个锅的。相对来说free-m更容易看,结果也更准确。如果应用程序有可用内存/系统的物理内存大于70%,说明内存足够,没有问题,但如果小于20%,就要考虑增加内存了df如果是排查磁盘问题,首先要检查磁盘空间是否足够,记得阿芬在上一家公司的时候,还在用svn,出现了一个很神奇的问题,就是没有报错哪里都有,但是代码提交不上去,查到最后磁盘空间不够了。。。所以不要问阿芬为什么排查磁盘问题的时候,首先是检查磁盘空间是否足够空间!!!查看磁盘空间就是df或者df-hiostat这两个命令说到磁盘IO,相信大家可以想象,在操作数据库的时候,首先要考虑的就是磁盘IO操作,因为相对来说,如果磁盘在一定时间内被处理大量的写操作会导致程序等待很长时间,导致客户端长时间没有响应。是不是降低了用户体验?检查磁盘IO状态的命令是iostat。使用的话会发现提示:-bash:iostat:commandnotfound,那是因为没有安装sysstat,直接安装即可:yuminstall-ysysstat接下来运行命令:iostat-xdk32,即与vmstat命令非常相似,就看这几个:rkB/s:每秒读取数据的kB;wkB/s:每秒写入数据的kB;svctm:I/O请求的平均服务时间,单位毫秒;util:百分之几秒用于I/O操作。如果接近100%,则表示磁盘带宽已满。这时候就需要优化程序或者加大磁盘了。如果是sar网络IO,可以通过sar-nDEV32从这个命令来看,和上面的差不多,意思是每3秒采样一次,一共采样2次:IFACE:LANinterfacerxpck/s:每秒接收的数据包txpck/s:每秒发送的数据包rxKB/s:每秒接收的数据量,单位KBytetxKB/s:每秒发送的数据量,单位KByterxcmp/s:每秒接收的压缩数据包txcmp/s:每秒发送的压缩数据包rxmcst/s:每秒接收的多播数据包这种方法非常简单直观,新手也比较容易看懂。下次面试官问你生产服务器变慢了,你能说说吗?诊断思路?为什么不?从服务器全局,到网络IO,再也不怕跟面试官吵架了