- 查看过多的僵尸进程
- 当平均负载过大时
# 第二行可以统计所有进程的状态信息$ top...Tasks: 214 total,1 running, 210 sleeping,0 stopped,3 zombie...
进程内存ps -O rss 指定 rss 可以查看进程的内存 , 另外还有命令 top/htop 与 pidstat -r# 查看 2579 PID 的内存# -O rss 代表附加 RSS 信息进行打印$ ps -O rss 2579 PIDRSS S TTYTIME COMMAND
实时查看进程内存pidstat -sr# 查看 23097 PID 的内存信息 , 每隔一秒打印一次# -r: 查看进程的内存信息# -s: 查看进程的 stack 信息# -p: 指定 PID# 1: 每间隔 1s 打印一次# 5: 共打印 5 组$ pidstat -sr -p 23097 1 5Linux 3.10.0-693.2.2.el7.x86_64 (shanyue)07/18/19_x86_64_(2 CPU)18:56:07UIDPIDminflt/smajflt/sVSZRSS%MEM StkSizeStkRefCommand18:56:080230970.000.00366424959962.4713680node18:56:08UIDPIDminflt/smajflt/sVSZRSS%MEM StkSizeStkRefCommand18:56:090230970.000.00366424959962.4713680node18:56:09UIDPIDminflt/smajflt/sVSZRSS%MEM StkSizeStkRefCommand18:56:100230970.000.00366424959962.4713680node18:56:10UIDPIDminflt/smajflt/sVSZRSS%MEM StkSizeStkRefCommand18:56:110230970.000.00366424959962.4713680node18:56:11UIDPIDminflt/smajflt/sVSZRSS%MEM StkSizeStkRefCommand18:56:120230970.000.00366424959962.4713680nodeAverage:UIDPIDminflt/smajflt/sVSZRSS%MEM StkSizeStkRefCommandAverage:0230970.000.00366424959962.4713680node
页表与缺页异常pidstat -s 中 minflt 与 majflt 代表缺页异常$ pidstat -s -p 23097 1 5Linux 3.10.0-693.2.2.el7.x86_64 (shanyue)07/18/19_x86_64_(2 CPU)18:56:07UIDPIDminflt/smajflt/sVSZRSS%MEM StkSizeStkRefCommand18:56:080230970.000.00366424959962.4713680node18:56:08UIDPIDminflt/smajflt/sVSZRSS%MEM StkSizeStkRefCommand18:56:090230970.000.00366424959962.4713680node
标准输出定位到文件中列出打开的文件lsof, list open files# 列出打开的文件$ lsofCOMMANDPIDTIDUSERFDTYPEDEVICESIZE/OFFNODE NAMEsystemd1rootcwdDIR253,140962 /systemd1rootrtdDIR253,140962 /
容器中 namespace PID -> global PID 映射换一个问题就是 , 如何找出 Docker 容器中的 pid 在宿主机对应的 pid# 容器环境# 已知容器中该进程 PID 为 122# 在容器中找到对应 PID 的信息 , 在 /proc/$pid/sched 中包含宿主机的信息$ cat /proc/122/schednode (7477, #threads: 7)...
# 宿主机环境# 7477 就是对应的 global PID , 在宿主机中可以找到# -p 代表指定 PID# -f 代表打印更多信息$ ps -fp 7477UIDPIDPPIDC STIME TTYTIME CMDroot747771610 Jul10 ?00:00:38 node index.js
global PID -> namespace PID 映射换一个问题就是 , 已知宿主机的 PID , 如何找出对应的容器常见的场景就是使用 top/htop 定位到占用内存/CPU过高的进程 , 此时需要定位到它所在的容器
# 通过 docker inspect 查找到对应容器$ docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.ID}}' | grep 22932# 通过 cgroupfs 找到对应容器$ cat /etc/22932/cgroup
幸运地是有人已经在 stackoverflow 上总结出来了- stackoverflow.com/questions/2…
# 查找关于$ vmstat -s
inode# -i: 打印 inode number$ ls -lahi
网络吞吐量- 带宽: 指网络链路的最大传输速率
- 吞吐量: 代表单位时间内成功传输的数据量 , 单位为 b/s (KB/s, MB/s)
- PPS: pck/s (Packet Per Second) , 以网络包为单位的传输速率
# 查看网卡信息$ ifconfig eth0$ sar -n DEV 1 | grep eth0#IFACErxpck/stxpck/srxkB/stxkB/srxcmp/stxcmp/srxmcst/s16:34:37eth08.002.000.691.900.000.000.0016:34:38eth039.0027.002.9138.110.000.000.0016:34:39eth013.0011.000.9213.970.000.000.0016:34:40eth016.0016.001.2120.860.000.000.0016:34:41eth017.0017.001.5115.270.000.000.00Average:eth018.6014.601.4518.020.000.000.00
socket 状态socket 信息推荐使用 ss , 不过 netstat 仍需要掌握 , 在特定条件 (docker 中) 有可能没有 ss 命令 。# -t TCP# -a 所有状态# -n 显示数字地址和端口号# -p 显示 pid$ netstat -tanpActive Internet connections (servers and established)Proto Recv-Q Send-Q Local AddressForeign AddressStatePID/Program nametcp00 127.0.0.11:352830.0.0.0:*LISTEN-tcp00 192.168.112.2:37344172.18.0.1:6379ESTABLISHED 78/nodetcp00 :::80:::*LISTEN78/node
- Recv-Q 与 Send-Q 不为0时 , 表示网络包堆积 , 需要注意
# 展示对每个协议的统计信息$ netstat -s# 展示对每个协议的统计信息$ ss -sTotal: 1468 (kernel 1480)TCP:613 (estab 270, closed 315, orphaned 0, synrecv 0, timewait 41/0), ports 0Transport TotalIPIPv6*1480--RAW000UDP30228TCP298145153INET328167161FRAG000# 也可以这样统计 estab socket 的数量$ netstat -tanp | grep ESTAB | wc -l
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 图解Linux的IO模型和相关技术
- Linux技巧:介绍设置定时周期执行任务的方法
- linux awk使用方法
- Linux中10大常用命令之sort使用案例
- 你对Linux文件的色码知多少?
- mysql5.7性能提升一百倍调优宝典
- 在 Linux 上使用开源软件创建 SDN
- 浅谈Linux中一切皆文件
- 开源技术大神总结的7条Linux核心知识点
- Linux常用命令之tee,您用过吗?