linux监控系统语句
一、cpuinfo(cpu)
# 查看cpu信息 cat /proc/cpuinfo # 查看CPU信息(型号) cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l # 查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo| grep "cpu cores"| uniq # 查看逻辑CPU的个数 cat /proc/cpuinfo| grep "processor"| wc -l
二、top(cpu、内存、磁盘io)
N:以PID顺序排列
P:以CPU顺序排列
M:以内存顺序排列
1:显示每个cpu的信息
us:用户空间占cpu
sy:系统空间占cpu
ni:改变过优先级的进程占cpu
id:空闲cpu占比
wa:等待磁盘io的cpu占比,如果高说明磁盘io是瓶颈
hi:硬件中断
si:软件中断
st:实时
三、dstat(cpu、内存、磁盘io、网络io)
yum -y install dstat
paging:系统的分页活动,当系统开始大量使用分页空间时值比较高,说明系统内存不足
int:线程中断,当多线程忙碌时值比较高
csw:上下文切换,当多线程忙碌时值比较高
四、lsof(进程、FD)
# 查看占用端口的进程 lsof -i:xx
# 查linux最大文件描述符数(open files) ulimit -a # 查当前FD/进程数量 lsof -n|awk '{print $2}'| sort | uniq -c | sort -nr | head # 查单个进程的FD lsof -p 2333
五、jstat(内存)
# 查看jvm情况,每隔1秒输出,输出60次,每隔10次输出一次列头 jstat -gc -h10 xxx 1000 60
S0C:存活区0分配内存(都是KB)
S1C:存活区1分配内存
S0U:存活区0使用内存
S1U:存活区1使用内存
EC:年轻代分配内存
EU:年轻代使用内存
OC:老年代分配内存
OU:老年代使用内存
MC:元空间分配内存
MU:元空间使用内存
CCSC:压缩类分配内存
CCSU:压缩类使用内存
YGC:年轻代GC次数
YGCT:年轻代GC总时间(秒)
年轻代每次GC时间 = YGCT / YGC
FGC:老年代GC次数
FGCT:老年代GC总时间(秒)
老年代每次GC时间 = FGCT / FGC
GCT:GC总时间(秒)
六、jmap(内存)
# 输出jvm内存分配情况 jmap -heap xxx
jmap -dump:live,format=b,file=/home/dump xxxxx
输出进程内存dump信息,后缀改为pcap以后可以用eclipse的MAT插件打开
七、ps、jstack(线程)
# 查进程中占用cpu高的线程 ps -mp xxxxx -o THREAD,tid,time | sort -rn
# 将十进制转换为十六进制 printf "%x\n" xxx
# 输出线程堆栈信息,筛选tid输出之后的30行 jstack -l xxxx(pid) | grep xxx(tid) -A 30
# 输出线程堆栈信息到文件,-l 打印锁信息 jstack -l xxxxx > 1.txt
对整个jstack文件进行分析
#线程状态归类 cat jstack.log | grep "java.lang.Thread.State" | sort -nr | uniq -c
八、pidstat(线程)
yum install sysstat #查看某个进程下每秒线程的切换情况 pidstat -wt [-p xxxx] 1 -w:显示上下文切换情况 -t:显示全部线程信息
九、jps(jvm)
# 输出jvm进程通过文件传递到进程中的参数 jps -v
十、netstat(连接)
# 查看tcp连接状态统计 netstat -nat | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
# 查看某个端口的tcp连接状态统计 netstat -nat |grep -i "80"| awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
# 查看某个端口的连接数量 netstat -nat|grep -i "80"|wc -l
# 查看连接某端口最多的ip netstat -ntu | grep :80 | awk '{print $5}' | cut -d: -f1 | awk '{++ip[$1]} END {for(i in ip) print ip[i],"\t",i}' | sort -nr
十一、tcpdump(网络)
# 查看网卡 ifconfig # 抓包并保存到文件 tcpdump tcp -i eth0 -s 0 and host xxx.xxx.xxx.xxx and port xxxx -w log.pcap
-i:只抓经过接口eth0的包
-s 0:抓到完整的数据包
-w:保存在文件
十二、iotop(磁盘io)
# 安装 yum -y install iotop # 查看进程的io占用 iotop
十三、iostat(磁盘io)
#每秒输出磁盘信息,输出10次 iostat -mx 1 10 -k 以KB为单位显示 -m 以M为单位显示 -x 显示详细信息
cpu属性:
如果%iowait的值过高,表示硬盘存在I/O瓶颈
如果%idle值高,表示CPU较空闲
如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量
如果%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU
磁盘属性:
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈
如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间
如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化
如果avgqu-sz比较大,也表示有当量io在等待