大家好,今天小编来为大家解答面试官:生产服务器变慢了,你能谈谈诊断思路吗-服务器生产这个问题,很多人还不知道,现在让我们一起来看看吧!
生产服务器变慢了,一般都是从这几点去分析:服务器整体情况, CPU 使用情况,内存,磁盘,磁盘 IO ,网络 IO
一一来说
top
看服务器整体使用情况,一般都是 top 命令搞定
img
我知道当你看到这张图的时候,肯定有点儿懵,特别是一个个的数字,这都是个啥?
阿粉带你一行一行的看
第 1 行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)
第 2 行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。一般情况下,只要没有僵死的进程,就没啥大问题。
第 3 行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。
第 4 行:物理内存总量、内存空闲量、内存使用量、作为内核缓存的内存量
第 5 行:虚拟内存总量、虚拟内存空闲量、虚拟内存使用量、已被提前加载的内存量
第 6 行里面主要看 PID 和 COMMAND 这两个参数,其中 PID 就是进程 ID , COMMAND 就是执行的命令,能够看到比较靠前的两个进程都是 java 进程
在当前这个界面,按下数字键盘 1 能够看到各个 CPU 的详细利用率
vmstat
想要了解 CPU 使用情况的话,常用的命令就是 vmstat 。
一般 vmstat 工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔,单位是秒,第二个参数是采样的次数,阿粉这次的命令是:vmstat -n 3 2 意思就是隔 3 秒取样一次,一共取样 2 次
其中主要关注 procs 和 cpu 这两个参数
procs :
- r :运行和等待 CPU 时间片的进程数,一般来说整个系统的运行队列不要超过总核数的 2 倍,要不然系统压力太大了
- b : 等待资源的进程数,比如正在等待磁盘 IO ,网络 IO 这种
cpu :
- us :用户进程消耗 CPU 时间百分比, us 值高的话,说明用户进程消耗 CPU 时间比较长,如果长期大于 50% 的话,那就说明程序还有需要优化的地方
- sy :内核进程消耗的 CPU 时间百分比
- us + sy 参考值为 80% ,如果大于 80% 的话,说明可能存在 CPU 不足
free
查看内存情况用的就是 free , 它主要有三个命令:free free -g free -m ,阿粉是推荐 free -m 为啥呢,咱们瞅瞅它们各自的运行结果就知道了
img
其中:free 命令运行结果显示的非常不友好,看到 3880324 可以快速告诉我它是多大吗?free -g 这个命令四舍五入了,明明给的内存是 4G ,结果使用 free -g 一查看,竟然成了 3G ?excuse me ?如果线上环境出问题了,你说因为内存给的不够,运维说,这锅我可不背
相对来说, free -m 是比较容易看,而且结果也是比较精确的
如果应用程序可用内存/系统物理内存大于 70% 的话,说明内存是充足的,没啥问题,但是如果小于 20% 的话,就要考虑增加内存了
df
如果排查磁盘问题的话,首先要看的就是磁盘空间够不够,还记得阿粉在上家公司的时候,用的还是 svn 出现了一个很神奇的问题,就是哪里都不报错,就是提交不上代码,排查到最后是磁盘空间不够...
所以别问阿粉为啥排查磁盘问题时,第一就是看磁盘空间够不够!!!
查看磁盘空间就是 df 或者 df -h 这两个命令了
iostat
说到磁盘 IO 相信你一定能够想到,在对数据库进行操作时,第一要考虑到的就是磁盘 IO 操作,因为相对来说,如果在某个时间段给磁盘进行大量的写入操作会造成程序等待时间长,导致客户端那边好久都没啥反应,用户体验就降低了吗
检查磁盘 IO 情况的命令就是 iostat ,如果你用的时候发现提示:-bash: iostat: command not found ,那是因为没有安装 sysstat ,安装一下就可以了:yum install -y sysstat
接下来运行命令:iostat -xdk 3 2 ,和 vmstat 命令很像有没有~
这么多指标咱们不需要都关注,只要看其中这几个就可以了:
- rkB/s :每秒读取数据量 kB ;
- wkB/s :每秒写入数据量 kB ;
- svctm :I/O 请求的平均服务时间,单位毫秒;
- util :一秒中有百分之几的时间用于 I/O 操作,如果接近 100% 说明磁盘带宽跑满了,这个时候就要优化程序或者增加磁盘了
sar
网络 IO 的话,可以通过 sar -n DEV 3 2 这条命令来看,和上面的差不多,意思就是每隔 3 秒取样一次,一共取样 2 次。
其中:
- IFACE :LAN 接口
- rxpck/s :每秒钟接收的数据包
- txpck/s :每秒钟发送的数据包
- rxKB/s :每秒接收的数据量,单位 KByte
- txKB/s :每秒发出的数据量,单位 KByte
- rxcmp/s :每秒钟接收的压缩数据包
- txcmp/s :每秒钟发送的压缩数据包
- rxmcst/s:每秒钟接收的多播数据包
这种方式特别简单直观,对新手来说比较容易看到
OK ,下次面试官问你生产服务器变慢了,你能谈谈诊断思路吗?咋不能呢,从服务器整体情况开始说,一直到网络 IO ,再也不怕和面试官扯皮了
OK,本文到此结束,希望对大家有所帮助。
本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/6984.html
用户评论
这太常见了!压力大的环境下,服务器确实容易变慢。
有11位网友表示赞同!
首先应该是看CPU和内存占用率吧,要是超高那就是问题所在。
有20位网友表示赞同!
磁盘I/O也是一个重点啊,读取速度慢会让人头疼。
有17位网友表示赞同!
是不是程序代码写得效率不高?这也要考虑。
有6位网友表示赞同!
网络带宽跟不上也能导致服务器变慢,得检查下网速。
有9位网友表示赞同!
最近有没有新软件部署或者系统升级?会不会是冲突的问题?
有17位网友表示赞同!
查看日志记录非常重要!里头藏着很多宝贵的线索。
有15位网友表示赞同!
确定问题源头后再下手解决,不要盲目优化
有17位网友表示赞同!
生产环境的服务器需要监控指标实时更新,这样才能及早发现问题。
有16位网友表示赞同!
系统配置能不能调整?比如增加内存或提高CPU核心数,这些都可能会有效果。
有11位网友表示赞同!
数据库也可能会造成瓶颈,检查下查询语句效率怎么样。
有9位网友表示赞同!
看看配置文件里有没有设置限制资源使用的项,解开它们可能可以解决问题
有5位网友表示赞同!
排查完成后记录解决方案和操作步骤,下次遇到类似问题就能快速应对。
有8位网友表示赞同!
面试官的这个问题考察的是你的诊断能力和解决问题的方法论。
有5位网友表示赞同!
这种类型的题目需要保持冷静,思路清晰地进行分析。
有19位网友表示赞同!
认真答完之后还要展示你对生产环境运维的理解。
有19位网友表示赞同!
这个题目的关键是要阐述你的思维过程如何一步步找到问题根源。
有12位网友表示赞同!
面试官可能更看重你的沟通能力和表达方式,所以要清楚条理地说明。
有12位网友表示赞同!
希望你在面试中表现出色!
有11位网友表示赞同!