侧边栏壁纸
博主头像
AllInOne博主等级

随风来,随风去

  • 累计撰写 45 篇文章
  • 累计创建 27 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

Linux常用监控命令(入门篇)

AllInOne
2024-04-20 / 0 评论 / 0 点赞 / 255 阅读 / 3,734 字
温馨提示:
点赞-关注-不迷路。

Linux监控优化

高并发配置

max_map_count

进程可以拥有的 VMA(虚拟内存区域)的数量。将该值调整为 262144:

# 修改配置文件。
cat >> /etc/sysctl.conf << EOF
vm.max_map_count = 262144
EOF
# 使修改生效。
sysctl -p

echo 120000 > /proc/sys/kernel/threads-max
echo 200000 > /proc/sys/kernel/pid_max

NTP 设置

您可以使用 pool.ntp.org 提供的互联网时间服务,也可以使用离线环境内置的 NTP 服务。例如,您可以使用云服务提供商提供的 NTP 服务。

  1. 查看 NTP 时间服务器或 Chrony 服务是否存在。
rpm -qa | grep ntp
systemctl status chrony
  1. 如不存在,运行以下命令安装 NTP 时间服务器。
sudo yum install ntp ntpdate && \
sudo systemctl start ntpd.service && \
sudo systemctl enable ntpd.service
  1. 检查 NTP 服务。
systemctl list-unit-files | grep ntp
  1. 检查 NTP 服务连接和监控状态。
netstat -tunlp | grep ntp
  1. 检查服务是否与 NTP 服务器同步。
ntpstat
  1. 检查网络中的 NTP 服务器。
ntpq -p

查看文件系统

df -Th

ulimit 设置

如果最大文件描述符和最大用户进程的值设置得过小,建议您将系统资源上限调大。

cat >> /etc/security/limits.conf << EOF
* soft nproc 65535
* hard nproc 65535
* soft nofile 655350
* hard nofile 655350
* soft stack unlimited
* hard stack unlimited
* hard memlock unlimited
* soft memlock unlimited
EOF

cat >> /etc/security/limits.d/20-nproc.conf << EOF 
*          soft    nproc     65535
root       soft    nproc     65535
EOF

时区

cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock

LANG 变量

# 修改配置文件。
echo "export LANG=en_US.UTF8" >> /etc/profile
# 使修改生效。
source /etc/profile

防火墙

systemctl stop firewalld.service
systemctl disable firewalld.service

SELinux

建议您禁用 SELinux。

# 临时变更。
setenforce 0
# 永久变更。
sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
sed -i 's/SELINUXTYPE/#SELINUXTYPE/' /etc/selinux/config

内存

Memory Overcommit

# 修改配置文件。
cat >> /etc/sysctl.conf << EOF
vm.overcommit_memory=1
EOF
# 使修改生效。
sysctl -p

Memory Overcommit 允许操作系统将额外的内存资源分配给进程。建议您启用 Memory Overcommit。

内存大页

查看内存页面大小

getconf PAGE_SIZE

查看是否开启了大页

grep -i HugePages_Total /proc/meminfo

如果 HugePages_Total 为 0,意味着 Linux 没有设置或没有启用 Huge pages。

大页比较详细的说明

关闭内存大页

# 临时变更。
echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
# 永久变更。
cat >> /etc/rc.d/rc.local << EOF
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo madvise > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
chmod +x /etc/rc.d/rc.local

vmstat

vmstat  1 3

参数说明:上面表示每1秒输出一次,一共3次打印。

image-1713571681528

  • procs:进程信息统计,包括正在运行的进程数®和处于阻塞状态的进程数(b)。

  • memory:内存使用情况统计,包括交换空间使用量(swpd)、空闲内存量(free)、用于缓存的内存量(buff)和用于缓存文件系统的内存量(cache)。

  • swap:交换空间使用情况统计,包括每秒从磁盘交换到内存的数据量(si)和每秒从内存交换到磁盘的数据量(so)。

  • io:磁盘IO操作情况统计,包括每秒从磁盘读取的数据量(bi)和每秒写入磁盘的数据量(bo)。

  • system:系统调用信息统计,包括每秒的中断次数(in)和每秒的上下文切换次数(cs)。

  • cpu:CPU活动统计,包括用户进程使用CPU的时间比例(us)、系统进程使用CPU的时间比例(sy)和CPU空闲时间比例(id)。

网络

tcp_abort_on_overflow

如果系统当前因后台进程无法处理的新连接而溢出,则允许系统重置新连接。

# 修改配置文件。
cat >> /etc/sysctl.conf << EOF
net.ipv4.tcp_abort_on_overflow=1
EOF
# 使修改生效。
sysctl -p

somaxconn

设置监听 Socket 队列的最大连接请求数为 1024

# 修改配置文件。
cat >> /etc/sysctl.conf << EOF
net.core.somaxconn=1024
EOF
# 使修改生效。
sysctl -p

iftop

安装

yum install epel-release
yum -y install iftop

使用

指定网卡

iftop -i eth0 -n -P
  • -i 指定需要检测的网卡, 如果有多个网络接口,则需要注意网络接口的选择,如:# iftop -i eth0,默认是选择第一块网卡
  • -B 将输出以 byte 为单位显示网卡流量,默认是 bit
  • -n 将输出的主机信息都通过 IP 显示,不进行 DNS 解析
  • -N 只显示连接端口号,不显示端口对应的服务名称
  • -F 显示特定网段的网卡进出流量 如: iftop -F 192.168.85.0/24
  • -h 帮助,显示参数信息
  • -p 以混杂模式运行 iftop,此时 iftop 可以用作网络嗅探器
  • -P 显示主机以及端口信息
  • -m 设置输出界面中最上面的流量刻度最大值,流量刻度分 5 个大段显示 如:# iftop -m 100M
  • -f 使用筛选码选择数据包来计数 如 iftop -f filter code
  • -b 不显示流量图形条
  • -c 指定可选的配置文件,如:iftop -c config file
  • -t 使用不带 ncurses 的文本界面,
  • 以下两个是只和 -t 一起用的:
  • -s num num 秒后打印一次文本输出然后退出,-t -s 60 组合使用,表示取 60 秒网络流量输出到终端
  • -L num 打印的行数
  • -f 参数支持 tcpdump 的语法,可以使用各种过滤条件。

tcpdump

根据ip过滤

源ip过滤

tcpdump -i eth0 src 125.120.188.169

显示所有

tcpdump src host  125.120.188.169

目标ip过滤

tcpdump -i eth0 dst 125.120.188.169

网段过滤

tcpdump net 125.120.188.0/24
tcpdump src net 192.168
tcpdump dst net 192.168

监听网卡

tcpdump -i eth0

监听端口

tcpdump tcp port 80
tcpdump src port 8088
tcpdump dst port 8088
tcpdump port 80 or port 8088
tcpdump portrange 8000-8080
tcpdump src portrange 8000-8080
tcpdump dst portrange 8000-8080

监听指定协议

tcpdump icmp

ip, ip6, arp, rarp, atalk, aarp, decnet, sca, lat, mopdl, moprc, iso, stp, ipx, or netbeui

数据包

08:26:25.533310 IP 172.20.20.1.36948 > 100.100.0.5.http: Flags [P.], ack 337, win 237, length 0
  • 第一列:时分秒毫秒 08:26:25.533310。
  • 第二列:网络协议 IP。
  • 第三列:发送方的ip地址+端口号,其中172.20.20.1是 ip,而 36948 是端口号
  • 第四列:箭头 >, 表示数据流向。
  • 第五列:接收方的ip地址+端口号,其中 100.100.0. 是 ip。
  • 第六列:冒号
  • 第七列:数据包内容,包括Flags 标识符,seq 号,ack 号,win 窗口,数据长度 length,其中 [P.] 表示 PUSH 标志位为 1,更多标识符见下面
    • [S] : SYN(开始连接)
    • [P] : PSH(推送数据)
    • [F] : FIN (结束连接)
    • [R] : RST(重置连接)
    • [.] : 没有 Flag (意思是除上面四种类型外的其他情况,有可能是 ACK 也有可能是 URG)

抓包案例

提取User-Agent 和主机名

tcpdump -nn -A -s1500 -l | egrep -i 'User-Agent:|Host:'

获取Get请求

tcpdump -vvAls0 | grep 'GET'

获取Post请求

tcpdump -vvAls0 | grep 'POST'

找出发包数最多的 IP

tcpdump -nnn -t -c 20000 | cut -f 1,2,3,4 -d '.' | sort | uniq -c | sort -nr | head -n 20

sar

得到所有数据

sar -A

实时监控网络IO

sar -n TCP 1 5

speedtest-cli

网络测速

sudo yum install -y  speedtest-cli
speedtest-cli

http访问延时

time curl www.baidu.com

磁盘

创建Swap

挂载

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
swapon -s
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

释放

swapoff /swapfile
swapoff -a
rm -rf  /swapfile
swapon -s

swappiness(swap使用率)

查看

cat /proc/sys/vm/swappiness

Swappiness 会对性能造成影响,因此建议您禁用 Swappiness。

# 修改配置文件。
cat >> /etc/sysctl.conf << EOF
vm.swappiness=0
EOF
# 使修改生效。
sysctl -p

swappiness参数值可设置范围在0到100之间。 此参数值越低,就会让Linux系统尽量少用swap分区,多用内存;参数值越高就是反过来,使内核更多的去使用swap空间。Ubuntu系统swappiness默认值为60,表示的含义可以这样来理解,当剩余物理内存低于40%(40=100-60)时,开始使用swap分区。CentOS系统此参数的默认值是30。我个人喜欢将作为服务器的Linux系统的swappiness参数设置为10。设置为100可能会影响整体性能,如果内存充足,就可以将这个值设置很低,甚至为0,以避免系统进行swap而影响性能。

文章参考

磁盘调度算法

cat /sys/block/${disk}/queue/scheduler
# 例如,运行 cat /sys/block/vdb/queue/scheduler

SATA

# 临时变更。
echo mq-deadline | sudo tee /sys/block/${disk}/queue/scheduler
# 永久变更。
cat >> /etc/rc.d/rc.local << EOF
echo mq-deadline | sudo tee /sys/block/${disk}/queue/scheduler
EOF
chmod +x /etc/rc.d/rc.local

SSD 和 NVMe

** 如果您的 NVMe 或 SSD 磁盘支持 kyber 调度算法。**

# 临时变更。
echo kyber | sudo tee /sys/block/${disk}/queue/scheduler
# 永久变更。
cat >> /etc/rc.d/rc.local << EOF
echo kyber | sudo tee /sys/block/${disk}/queue/scheduler
EOF
chmod +x /etc/rc.d/rc.local

如果您的系统不支持 SSD 和 NVMe 的 kyber 调度算法,建议您使用 none(或 noop)调度算法。

# 临时变更。
echo none | sudo tee /sys/block/vdb/queue/scheduler
# 永久变更。
cat >> /etc/rc.d/rc.local << EOF
echo none | sudo tee /sys/block/${disk}/queue/scheduler
EOF
chmod +x /etc/rc.d/rc.local

dd

磁盘测速

查看磁盘的读写速度

dd if=/dev/zero of=/dev/null bs=1k count=5000k
dd if=/dev/zero of=/data/tmp/t bs=1k count=5000k

pidstat

查看pid的iops

pidstat -d -p 13050 1

查看所有进程的iops

pidstat -d 3

iotop

查看应用程序的IO情况

yum install -y iotop
iotop

strace

查看对应检查PID的读写延迟

strace -ttT -p 13015

iostat

查看所有磁盘的读写

sudo yum install sysstat
iostat -x 1 10
iostat -dx

filetop

安装

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
# 安装bcc-tools
yum install -y bcc-tools
# 配置PATH路径
export PATH=$PATH:/usr/share/bcc/tools
# 验证安装成功
cachestat 

跟着我这个执行,如果失败以后在参考下面的例子。

参考链接

参考地址

查看是否固态

grep ^ /sys/block/*/queue/rotational

0表示是固态,1表示机械。

CPU

CPU Scaling Governor(Cpu超频)

查看是否开启了超频

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

开启超频

echo 'performance' | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

CPU Scaling Governor 用于控制 CPU 能耗模式。如果您的 CPU 支持该配置项,建议您将其设置为 performance 以获得更好的 CPU 性能。

pidstat

查看pid对应的cpu使用情况

pidstat -p 13050 1

频率查看

cat /proc/cpuinfo | grep -i "cpu mhz"

perf

安装

yum install -y perf

查看指定程序CPU调用

perf trace -p $(pgrep mysqld)

查看CPU调度器统计信息

perf sched record --  sleep 10
perf sched latency
perf sched timehist

top

top以后按c,就可以看到执行的命令是哪个。

htop

系统调用汇总

perf trace -s -p $(pgrep mysqld)

查看程序的IO调用情况

perf trace -e sendto -p $(pgrep mysqld)

系统调用

strace

程序系统调用统计

系统调用跟踪

strace -c dd if=/dev/zero of=/dev/null bs=1k count=5000k

压测

stress-ng

安装

sudo yum install stress-ng

参数说明

-h,--help:显示帮助信息;
 
--version:显示版本信息;
 
-t,–timeout:指定程序运行结束的时间,后面直接跟数字,单位为秒;
 
-c,–-cpu:后面空格跟一个整数,表示测试CPU的进程数,--cpu 4 :表示生成4个worker循环调用sqrt()产生cpu压力;
 
-i,--io:后面空格跟一个整数,表示测试磁盘I/O的进程数, --io 4 :表示生成4个worker循环调用sync()产生io压力;
 
-m,--vm:后面空格跟一个整数,表示测试内存的进程数,--vm 4 :表示生成4个worker循环调用malloc()/free()产生内存压力;
 
-d,--hdd:后面空格直接跟数字,表示产生执行write和unlink函数的进程数,用于磁盘负载测试;
 
--cpu-method:指定CPU的测试方法,后面空格直接跟方法名;
 
--metrics:输出命令执行指标;
 
--vm-bytes:指定在内存测试时malloc的字节数,默认256M;
 
--class:指定测试类别,后面空格跟类别名;
 
--matrix:启用矩阵测试模式,后面空格跟矩阵模式名;
 
--random-seed:指定测试随机种子,后面空格跟种子名;
 
--sequential:启用顺序测试模式;
 
--hdd-bytes:指定写的字节数;
 
--cpu-load:CPU负载占比,后面空格直接跟数字,单位为百分比;

案例

# CPU压测
 
stress-ng --cpu 4 --cpu-method matrixprod --timeout 20s
 
使用 4 个 CPU 进程数,进行矩阵乘法计算以进行压力测试,持续时间为20秒
 
stress-ng -c 2 --cpu-method pi --timeout 20s
 
产生 2 个 worker 做圆周率算法压力
 
stress-ng -c 2 --cpu-method all --timeout 20s
 
产生 2 个 worker 迭代使用 30 多种不同的压力算法,包括pi, crc16, fft等等
 
stress-ng --sock 2 --timeout 20s
 
产生 2 个 worker 调用 socket 相关函数产生压力
 
stress-ng --tsc 2 --timeout 20s
 
产生 2 个 worker 读取 tsc 产生压力
 
 
stress-ng --tsc 2 --taskset 0 --timeout 20s
 
将压力指定到特定的cpu 0上
 
 
# 内存压测
 
stress-ng --vm 4 --vm-bytes 512M --timeout 20s
 
用 4 个内存分配进程, 每次分配大小512M,分配后不释放,保持测试20秒
 
# IO负载压测
 
stress-ng --io 4 --timeout 20s
 
使用 4 个 IO 进程 ,保持测试20秒
 
 
# 磁盘IO压测
 
stress-ng --io 4 --hdd 1 --hdd-bytes 1G --timeout 20s
 
使用 4 个I/O进程, 1 个写进程,每次写1G 文件块,测试20秒

siege

安装

wget http://download.joedog.org/siege/siege-3.0.8.tar.gz

tar xzvf siege-3.0.8.tar.gz

cd siege-3.0.8

./configure

make && make install

执行

siege www.linuxidc.com/test.php -b -r10 -c400

参数说明

  • -b 每次request之间没有延迟,还有一个-d参数加上延迟,类似于一些专业测试工具的思考时间。
  • -r 每次请求执行多少次。
  • -c 并发用户。
0

评论区