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在等待

 

posted @ 2020-03-11 23:43  syxsdhy  阅读(254)  评论(0编辑  收藏  举报