Java问题排查 Linux命令

CPU

使用top查看cpu的load,使用shift+p按照cpu排序。需要了解wa,us等都是什么意思
使用uptime查看系统启动时间和load,load是什么意思呢?什么算是系统过载?这是个高频问题,别怪我没告诉你
ps命令勃大茎深,除了查进程号外,你还需要知道R、S、D、T、Z、<、N状态位的含义
top和ps很多功能是相通的,比如watch “ps -mo %cpu,%mem,pid,ppid,command ax” 相当于top的进程列表;top -n 1 -bc 和ps -ef的结果相似。
有生就有死,可以用kill杀死进程。对java来说,需要关注kill -9、kill -15、kill -3的含义,kill的信号太多了,可以用kill -l查看,搞懂大多数信号大有裨益。
如果暂时不想死,可以通过&符号在后台执行,比如tail -f a.log &。jobs命令可以查看当前后台的列表,想恢复的话,使用fg回到幕前。这都是终端作业,当你把term关了你的后台命令也会跟着消失,所以想让你的程序继续执行的话,需要nohup命令,此命令需要牢记
mpstat 显示了系统中 CPU 的各种统计信
了解cpu亲和性

内存

free -m 命令,了解free、used、cached、swap各项的含义
cat /proc/meminfo 查看更详细的内存信息
细心的同学可能注意到,CPU和内存的信息,通过top等不同的命令显示的数值是一样的。
slabtop 用来显示内核缓存占用情况,比如遍历大量文件造成缓存目录项。曾在生产环境中遇到因执行find /造成dentry_cache耗尽服务器内存。
vmstat 命令是我最喜欢也最常用的命令之一,可以以最快的速度了解系统的运行状况。每个参数的意义都要搞懂。
swapon、swapoff 开启,关闭交换空间
** sar** 又一统计类轮子,一般用作采样工具

存储

使用df -h查看系统磁盘使用概况
lsblk 列出块设备信息
du 查看目录或者文件大小

网络

rsync 强大的同步工具,可以增量哦
netstat 查看Linux中网络系统状态信息,各种
ss 它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
curl、wget 模拟请求工具、下载工具。如wget -r http://site 将下载整个站点
ab Apache服务器的性能测试工具
ifstat 统计网络接口流量状态
nslookup 查询域名DNS信息的工具,在内网根据ip查询域名是爽爆了
nc 网络工具中的瑞士军刀,不会用真是太可惜了
arp 可以显示和修改IP到MAC转换表
traceroute 显示数据包到主机间的路径,俗称几跳,跳的越少越快
tcpdump 不多说了,去下载wireshark了
wall 向当前所有打开的终端上输出信息。使用who命令发现女神正在终端上,可以求爱

网络方面推荐安装体验一下kaliLinux,上面的工具会让你high到极点。

一般排查问题的方法

一般排查问题也是围绕着内存cpu等几个元素去排查。下图是一张大体的排查故障或者性能问题的过程,看图,不多说。
Java问题排查 Linux命令_第1张图片

应用场景举例
下面举例从具体应用场景来说明各种命令的组合应用,此类场景数不胜数,需要个人积累。但强烈建议将sed和awk练的熟练一些。
怎么查看某个Java进程里面占用CPU最高的一个线程具体信息?

获取进程中占用CPU最高的线程,计为n。
使用top top -H -p pid,肉眼观察之
使用ps  ps -mo spid,lwp,stime,time,%cpu -p pid

将线程号转化成十六进制printf 0x%x n
使用jstack找到相应进程,打印线程后的100行信息 jstack -l pid| grep spid -A 100

统计每种网络状态的数量
netstat -ant | awk '{print $6}' | sort | uniq -c | sort -n -k 1 -r

首先使用netstat查看列表,使用’awk’截取第六列,使用uniq进行统计,并对统计结果排序。当然,也可以这样。

netstat -ant | awk '{arr[$6]++}END{for(i in arr){print arr[i]" "i }}' | sort -n -k 1 -r
这和“分析apache日志,给出当日访问ip的降序列表”是一样的问题。
怎么查看哪个进程在用swap

首先要了解/proc/$pid/smaps里有我们所需要的各种信息,其中Swap字段即是我们所需要的。只要循环遍历一下即可。

for i in `cd /proc;ls |grep "^[0-9]"|awk ' $0 >100'` ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps ;done |sort -k2nr 

最后,附上http://www.brendangregg.com/ 的大图一张
Java问题排查 Linux命令_第2张图片
参考文档:https://juejin.im/post/5db69c05f265da4d4434a221

你可能感兴趣的:(优化)