Linux各项指标监控及问题排查

Linux各项指标监控及问题排查(二)

点击关注👉 Cloud研习社 2023-05-05 07:31 发表于山东
Cloud研习社
为Linux云计算零基础同学服务,致力于打造一套完整的linux云计算教程。包括新手学习路线、linux、存储、集群架构以及Docker,K8S,DevOps等
203篇原创内容

 



图片

 实时查看进程内存

 

 

 

pidstat -sr

 

# 查看 23097 PID 的内存信息,每隔一秒打印一次
# -r: 查看进程的内存信息
# -s: 查看进程的 stack 信息
# -p: 指定 PID
# 1: 每间隔 1s 打印一次
# 5: 共打印 5 组
$ pidstat -sr -p 23097 1 5
Linux 3.10.0-693.2.2.el7.x86_64 (shanyue)       07/18/19        _x86_64_        (2 CPU)

18:56:07      UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM StkSize  StkRef  Command
18:56:08        0     23097      0.00      0.00  366424  95996   2.47    136      80  node

18:56:08      UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM StkSize  StkRef  Command
18:56:09        0     23097      0.00      0.00  366424  95996   2.47    136      80  node

18:56:09      UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM StkSize  StkRef  Command
18:56:10        0     23097      0.00      0.00  366424  95996   2.47    136      80  node

18:56:10      UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM StkSize  StkRef  Command
18:56:11        0     23097      0.00      0.00  366424  95996   2.47    136      80  node

18:56:11      UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM StkSize  StkRef  Command
18:56:12        0     23097      0.00      0.00  366424  95996   2.47    136      80  node

Average:      UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM StkSize  StkRef  Command
Average:        0     23097      0.00      0.00  366424  95996   2.47    136  

 



图片

 页表与缺页异常

 

 

 

pidstat -s 中 minflt 与 majflt 代表缺页异常

 

$ pidstat -s -p 23097 1 5
Linux 3.10.0-693.2.2.el7.x86_64 (shanyue)       07/18/19        _x86_64_        (2 CPU)

18:56:07      UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM StkSize  StkRef  Command
18:56:08        0     23097      0.00      0.00  366424  95996   2.47    136      80  node

18:56:08      UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM StkSize  StkRef  Command
18:56:09        0     23097      0.00      0.00  366424  95996   2.47    136 

 



图片

 标准输出定位到文件中

 

 

 

列出打开的文件

lsof, list open files

 

# 列出打开的文件
$ lsof
COMMAND     PID   TID     USER   FD      TYPE             DEVICE    SIZE/OFF       NODE NAME
systemd       1           root  cwd       DIR              253,1        4096          2 /
systemd       1           root  rtd       DIR              253,1        4096

 



图片

 容器中 namespace PID -> global PID 映射

 

 

 

换一个问题就是,如何找出 docker 容器中的 pid 在宿主机对应的 pid

 

# 容器环境

# 已知容器中该进程 PID 为 122
# 在容器中找到对应 PID 的信息,在 /proc/$pid/sched 中包含宿主机的信息
$ cat /proc/122/sched
node (7477, #threads: 7)
...
# 宿主机环境

# 7477 就是对应的 global PID,在宿主机中可以找到
# -p 代表指定 PID
# -f 代表打印更多信息
$ ps -fp 7477
UID        PID  PPID  C STIME TTY          TIME CMD
root      7477  7161  0 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

 




图片

 SWAP

 

 

 

 

# 查找关于
$ 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
#                IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
16:34:37         eth0      8.00      2.00      0.69      1.90      0.00      0.00      0.00
16:34:38         eth0     39.00     27.00      2.91     38.11      0.00      0.00      0.00
16:34:39         eth0     13.00     11.00      0.92     13.97      0.00      0.00      0.00
16:34:40         eth0     16.00     16.00      1.21     20.86      0.00      0.00      0.00
16:34:41         eth0     17.00     17.00      1.51     15.27      0.00      0.00      0.00
Average:         eth0     18.60     14.60      1.45     18.02      0.00      0.00      0.00

 



图片

 socket 状态

 

 

 

socket 信息

 

推荐使用 ss,不过 netstat 仍需要掌握,在特定条件 (docker 中) 有可能没有 ss 命令。

 

# -t TCP
# -a 所有状态
# -n 显示数字地址和端口号
# -p 显示 pid
$ netstat -tanp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.11:35283        0.0.0.0:*               LISTEN      -
tcp        0      0 192.168.112.2:37344     172.18.0.1:6379         ESTABLISHED 78/node
tcp        0      0 :::80                   :::*                    LISTEN      78/node# -t TCP
# -a 所有状态
# -n 显示数字地址和端口号
# -p 显示 pid
$ netstat -tanp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.11:35283        0.0.0.0:*               LISTEN      -
tcp        0      0 192.168.112.2:37344     172.18.0.1:6379         ESTABLISHED 78/node
tcp        0      0 :::80                   :::*                    LISTEN      78/node

 

Recv-Q 与 Send-Q 不为0时,表示网络包堆积,需要注意

 



图片

 协议信息

 

 

 

# 展示对每个协议的统计信息
$ netstat -s

# 展示对每个协议的统计信息
$ ss -s
Total: 1468 (kernel 1480)
TCP:   613 (estab 270, closed 315, orphaned 0, synrecv 0, timewait 41/0), ports 0

Transport Total     IP        IPv6
*         1480      -         -
RAW       0         0         0
UDP       30        22        8
TCP       298       145       153
INET      328       167       161
FRAG      0         0         0

# 也可以这样统计 estab socket 的数量
$ netstat -tanp | grep ESTAB | wc -l

 



图片

 PostgresSQL 的最大连接数与当前连接数


 

 

-- 最大连接数
show max_connections;

-- 当前连接数
select count(*) from pg_stat_activity;

 

 



图片

 mysql 的最大连接数与当前连接数


 

 

-- 最大连接数
show variables like 'max_connections';

-- 当前连接数
show full processlist;
雷哥开通了抖音(云计算雷哥)和微信视频号,每周一、五、日,晚21点定期直播,其余时间不定期直播,与大家一起聊聊技术、聊聊行业!

 

图片

 

推荐阅读

干货 | PXE+kickstart无人值守批量装机(原理与架构)

干货 | PXE+kickstart无人值守批量装机(实战部署)

ifconfig已淘汰,ip登场

40个简单而有效的Shell脚本,想不起来的时候一看就懂(下)

Linux 云计算 学习路线(建议收藏)

放后台的Linux任务没有了,试试这个命令

Linux 网络状态工具 ss 命令详解

这次终于搞明白VLAN技术了

终于有人把敏捷、DevOps、CI、CD讲清楚了

快速上手:iperf网络性能测试工具(运维必会)

一文带你读懂ceph,从此不如ceph大门

find命令的7中用法,看完就没有不会用的

shell分析日志文件命令全面总结(超详细)

如何快速排查Linux磁盘IO故障

在Linux上保护SSH服务器连接的8种方法

分享一款免费好用的跨平台SSH客户端

HTTP/3正式发布,深入理解HTTP/3协议

kafka原理竟然如此简单,一看就明白!

给计算机、云计算专业学弟、学妹们的血泪建议

必不可少的Linux运维脚本!!!

从西工大遭网络攻击看如何防止ssh被暴力破解

领导让我选监控,Zabbix 和 Prometheus 我该选哪个

Linux的TCP连接数量最大不能超过65535?那服务器是如何应对百万千万的并发的?

 

阅读 328
 
posted @ 2023-06-26 15:30  往事已成昨天  阅读(34)  评论(0编辑  收藏  举报