java大厂面试题整理(九)生产环境linux几个常用命令
这篇很杂,是几个问题整理在一起了。下面简单的一个个说一下。
生产环境服务器变慢了,诊断思路是什么?
其实服务器变慢的原因是很多的,所以要一点点排查。主要是分了下面几个方面:
- 整机
linux命令:top可以查看当前电脑的进程cpu消耗情况,
其中有个load average后面有三个值,如果三个值相加/3大于0.6.说明系统压力过大。
top还有个精简版的命令:uptime。就可以查看这三个值。
文章图片
top命令 - CPU
linux命令:vmstat可以按照给定时间间隔采样。例如:;vmstat -n 2 3
上面的命令意思是:每个两秒采样一次,共采样三次。
文章图片
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指定单位。
文章图片
free命令 - 硬盘
linux命令:df。查看磁盘剩余空间数。
文章图片
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太长。需要优化。
文章图片
iostat命令
- 先用top命令找出cpu占比最高的。
- ps -ef|grep java|grep -v grep 或者jps -l进一步定位。得知是一个怎样的后台程序占cpu过高。
- 定位到具体的线程或者代码 ps -mp 进程号 -o THREAD,tid,time
文章图片
定位到消耗cpu的线程
这个命令中:
- -m是显示所有的线程
- -p pid进程使用cpu时间
- -o 该参数后是用户的自定义输出格式
- 将需要的线程id转化成16进制格式(英文小写格式)
- 用jstack 进程号|grep 线程id(16进制的) -A60。
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- PMSJ寻平面设计师之现代(Hyundai)
- 杜月笙的口才
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- Linux下面如何查看tomcat已经使用多少线程
- 皮夹克
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题