java大厂面试题整理(九)生产环境linux几个常用命令

这篇很杂,是几个问题整理在一起了。下面简单的一个个说一下。
生产环境服务器变慢了,诊断思路是什么?
其实服务器变慢的原因是很多的,所以要一点点排查。主要是分了下面几个方面:

  • 整机
    linux命令:top可以查看当前电脑的进程cpu消耗情况,
    其中有个load average后面有三个值,如果三个值相加/3大于0.6.说明系统压力过大。
    top还有个精简版的命令:uptime。就可以查看这三个值。
    java大厂面试题整理(九)生产环境linux几个常用命令
    文章图片
    top命令
  • CPU
    linux命令:vmstat可以按照给定时间间隔采样。例如:;vmstat -n 2 3
    上面的命令意思是:每个两秒采样一次,共采样三次。
    java大厂面试题整理(九)生产环境linux几个常用命令
    文章图片
    vmstat命令
    这个命令不仅仅可以查看cpu,主要是为了查看cpu而已,但是也还有一些别的参数。简单说下参数的意思:
    procs中:
    r:运行和等待cpu时间片的进程数。原则上整个系统的运行队列不能超过总和数的2倍。否则代表系统压力过大。
    b:等待资源的进程数,比如正在等待磁盘i/o,网络i/o等。
    cpu中:
    us:用户进程消耗cpu时间的百分比。us值高,用户消耗cpu时间多,如果长期大于百分之五十则需要优化。
    sy:内核进程消耗cpu时间百分比。
    us+sy如果大于百分之八十,说明可能存在cpu不足。
    id:处于空闲的cpu百分比。
    wa:系统等待io的cpu时间百分比。
  • 内存
    linux查看内存命令:free。后面可以用-x指定单位。
    java大厂面试题整理(九)生产环境linux几个常用命令
    文章图片
    free命令
  • 硬盘
    linux命令:df。查看磁盘剩余空间数。
    java大厂面试题整理(九)生产环境linux几个常用命令
    文章图片
    df命令
  • 磁盘IO
    linux查看命令:iostat
    这里参数比较多,简单介绍下:
    rkB/s:每秒读取数据量kb
    wkB/s: 每秒写入数据量kb
    svctm:io请求的平均服务时间,单位毫秒
    await:io请求的平均等待时间,单位毫秒。值越小性能越好。
    util:一秒钟有百分之几的时间用于io操作。接近百分百时,说明磁盘带宽跑满,需要优化程序或者增加磁盘。
    rkB和wkB根据系统应用不同会有不同的值,但如果长期超大数据读写,说明不正常,需要优化程序。
    svctm和await的值越接近,说明几乎没有io等待,磁盘性能好。
    如果await远高于svctm说明io队列等待v太长。需要优化。
    java大厂面试题整理(九)生产环境linux几个常用命令
    文章图片
    iostat命令
CPU占用过高定位,分析思路 【java大厂面试题整理(九)生产环境linux几个常用命令】基本上简单的查看定位性能问题就是如上查看,看哪个值有问题再着重解决。比如说io,内存和硬盘这些问题,io的话调整代码。没啥好解决的办法。而内存硬盘不行就换大一点的。毕竟现在成本也便宜。这里操作性比较大的是cpu占用过高的解决思路。下面简单说下定位CPU占用过高的步骤。
  1. 先用top命令找出cpu占比最高的。
  2. ps -ef|grep java|grep -v grep 或者jps -l进一步定位。得知是一个怎样的后台程序占cpu过高。
  3. 定位到具体的线程或者代码 ps -mp 进程号 -o THREAD,tid,time
    java大厂面试题整理(九)生产环境linux几个常用命令
    文章图片
    定位到消耗cpu的线程
    这个命令中:
  • -m是显示所有的线程
  • -p pid进程使用cpu时间
  • -o 该参数后是用户的自定义输出格式
  1. 将需要的线程id转化成16进制格式(英文小写格式)
  2. 用jstack 进程号|grep 线程id(16进制的) -A60。
本篇笔记就到这里了,因为我看的教材少了一集,感觉错过了很多东西。。所以就这么虎头蛇尾的结束了。如果稍微帮到你了记得点个喜欢点个关注,也祝大家工作顺顺利利!

    推荐阅读