通过 docker 启动的线程无法被 kill 命令杀掉。如果要取消这个进程,则只能关闭此容器。
[内容] Linux 当前网络流量的查看
内容一:查看此时的瞬间网络流量
# ip -s -h link
内容二:持续查看某张网卡的网络流量
# iftop -nN -i eth0
(补充:这里以持续查看名为 eth0 网卡的流量为例)
[步骤] Linux page_owner 排查工具的使用 (记录内存的使用情况)
正文:
步骤一:查看 page_owner 是否开启
1.1 通过 dmesg 命令查看 page_owner 是否开启
# dmesg | grep page_owner
[ 1.149165] page_owner is disabled
(补充:当显示此类信息时则 page_owner 没有开启)
1.2 通过 /sys/kernel/debug/ 目录查看 page_ownerr 是否开启
# ls -l /sys/kernel/debug/page_owner
ls: cannot access /sys/kernel/debug/page_owner: No such file or directory.
(补充:当 /sys/kernel/debug/page_owner 文件不存在时则 page_owner 没有开启)
步骤二:开启 page_owner
2.1 开启 page_owner
# grubby --args="page_owner=on" --update-kernel=0
(注意:开启 page_owner 会额外占用一定量的内存)
2.2 重启系统
# reboot
2.3 确认 page_owner 已经开启
2.3.1 通过 dmesg 命令确认 page_owner 是否开启
# dmesg | grep page_owner
[ 0.000000] Command line: BOOT_IMAGE=(hd0,gpt2)/vmlinuz-4.18.0-425.19.2.el8_7.x86_64 root=/dev/mapper/rootvg-rootlv ro ipv6.disable=1 audit=1 audit_backlog_limit=8192 crashkernel=auto resume=/dev/mapper/rootvg-swaplv rd.lvm.lv=rootvg/rootlv rd.lvm.lv=rootvg/swaplv rhgb quiet rd.shell=0 page_owner=on
[ 0.000000] Kernel command line: BOOT_IMAGE=(hd0,gpt2)/vmlinuz-4.18.0-425.19.2.el8_7.x86_64 root=/dev/mapper/rootvg-rootlv ro ipv6.disable=1 audit=1 audit_backlog_limit=8192 crashkernel=auto resume=/dev/mapper/rootvg-swaplv rd.lvm.lv=rootvg/rootlv rd.lvm.lv=rootvg/swaplv rhgb quiet rd.shell=0 page_owner=o
(补充:当显示此类信息时则 page_owner 已经开启)
2.3.2 通过 /sys/kernel/debug/ 目录确认 page_ownerr 是否开启
# ls -l /sys/kernel/debug/page_owner
-r--------. 1 root root 0 Apr 13 14:36 /sys/kernel/debug/page_owner
(补充:当 /sys/kernel/debug/page_owner 文件存在时则 page_owner 已经开启)
步骤三:分析 page_owner 产生的记录
3.1 导出 page_owner 产生的记录
# cat /sys/kernel/debug/page_owner > page_owner_full.txt
(补充:这里以将 page_owner 产生的记录导出到名为 page_owner_full.txt 文件为例)
(
注意:
1) 此命令会产生体积很巨大的文件
2) 此命令会持续执行直到手动取消
3) 可以通过同时按下 “ctrl” 键和 “C” 键或者使用 kill 命令取消
4) 如果内存变化较快则可以让此命令多执行一会,反之则可以少执行一会
)
3.2 解析 page_owner 产生的记录
# page_owner_sort page_owner_full.txt sorted_page_owner.txt
loaded 42903
sorting ....
culling
(补充:这里以分析名为 page_owner_full.txt 的文件并将分析结果导入到 sorted_page_owner.txt 文件为例)
3.3 查看 page_owner 产生的记录
# less sorted_page_owner.txt
1 times:
Page allocated via order 0, mask 0x0(), pid 1, tgid 1 (swapper/0), ts 48952109 ns, free_ts 0 ns
PFN 4096 type Unmovable Block 8 type Unmovable Flags 0xfffffc0000100(slab|node=0|zone=1|lastcpupid=0x1fffff)
register_early_stack+0x28/0x60
init_page_owner+0x30/0x2d0
kernel_init_freeable+0x13c/0x232
kernel_init+0xa/0x108
1 times:
Page allocated via order 0, mask 0x0(), pid 1, tgid 1 (swapper/0), ts 48952566 ns, free_ts 0 ns
PFN 4097 type Unmovable Block 8 type Unmovable Flags 0xfffffc0000100(slab|node=0|zone=1|lastcpupid=0x1fffff)
register_early_stack+0x28/0x60
init_page_owner+0x30/0x2d0
kernel_init_freeable+0x13c/0x232
kernel_init+0xa/0x108
......
(补充:这里以查看名为 sorted_page_owner.txt 文件里的分析结果为例)
步骤四:关闭 page_owner
4.1 开启 page_owner
# grubby --remove-args="page_owner=on" --update-kernel=0
(注意:关闭 page_owner 会额外释放一定量的内存)
4.2 重启系统
# reboot
4.3 确认 page_owner 已关闭
4.3.1 通过 dmesg 命令确认 page_owner 是否关闭
# dmesg | grep page_owner
[ 2.022585] page_owner is disabled
(补充:当显示此类信息时则 page_owner 没有开启)
4.3.2 通过 /sys/kernel/debug/ 目录确认 page_ownerr 是否关闭
# ls -l /sys/kernel/debug/page_owner
ls: cannot access '/sys/kernel/debug/page_owner': No such file or directory
(补充:当 /sys/kernel/debug/page_owner 文件不存在时则 page_owner 没有开启)
参考文献:
https://access.redhat.com/solutions/5609521
[CONTENT] Linux maximum number of processes setting
Case One: Set the maximum number of processes for all users
# vim /etc/security/limits.conf
Add the following
......
* soft nofile 10240
* hard nofile 10240
(Add: Take maximum number of processes is 10240 for everyone as an example here)
Case Two: Set the maximum number of processes for one group
# vim /etc/security/limits.conf
Add the following
......
@mingyuzhu soft nofile 10240
@mingyuzhu hard nofile 10240
(Add: Take maximum number of processes is 10240 for group mingyuzhu as an example here)
Case Two: Set the maximum number of processes for one user
# vim /etc/security/limits.conf
Add the following
......
mingyuzhu soft nofile 10240
mingyuzhu hard nofile 10240
(Add: Take maximum number of processes is 10240 for user mingyuzhu as an example here)
[命令] Linux 命令 lsof (显示进程)
内容一:lsof 命令输出结果
# lsof | more
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 251,1 4096 1 /
......
内容二:lsof 命令输出结果简介
1) COMMAND 进程名
2) PID (Process Id) PID 号
3) USER 用户
4) FD 文件描述信息
(补充:cwd 代表当前目录,txt 代表 txt 文件,rtd 代表 root 目录,mem 代表内存映射文件)
5) TYPE 文件类型
(补充:DIR 代表当前目录,REG 代表普通文件,CHR 代表字符,a_inode 代表 Inode 文件,FIFO 代表管道或者 socket文件,netlink 代表网络,unkonwn 代表未知)
6) DEVICE 设备 ID
7) SIZE/OFF 进程大小
8) NODE 文件的 Inode 号
9) NAME 路径或链接
内容三:lsof 使用案例
3.1 案例一:显示已经被删除的文件
# lsof | grep deleted
3.2 案例二:显示用户已打开的案例
3.2.1 显示某用户已打开的文件
# lsof -u zhumingyu mingyuzhu
(补充:这里以显示用户 zhumingyu 和 mingyuzhu 已打开的文件为例)
3.2.2 不显示某用户已打开的文件
# lsof -u mingyuzhu
(补充:这里以不显示用户 mingyuzhu 已打开的文件为例)
3.3 案例三:显示进程已打开的文件
3.3.1 显示某进程已打开的文件
# lsof -p 1024
(补充:这里以显示 PID 号是 1024 已打开的文件为例)
3.3.2 不显示某进程已打开的所有文件
# lsof -p ^1024
(补充:这里以不显示 PID 号是 1024 已打开的文件为例)
3.3.3 显示某几个进程已打开的文件
# lsof -p 1,2,3
(补充:这里以显示 PID 号是 1、2 和 3 已打开的文件为例)
3.4 案例四:显示已打开的网络文件
3.4.1 显示所有已打开的网络文件
# lsof -i
3.4.2 显示所有 IPv4 协议已打开的文件
# lsof -i 4
3.4.3 显示所有 IPv6 协议已打开的文件
# lsof -i 6
3.4.4 显示所有 TCP 协议已打开的文件
# lsof -i TCP
3.4.5 显示所有 TCP 协议已打开的文件
# lsof -i UDP
3.4.6 显示某个 TCP 端口或者 UDP 端口已打开的文件
# lsof -i:22
(补充:这里以显示 TCP 或者 UPD 的 22 端口已打开的文件为例)
3.4.7 显示某个 TCP 端口已打开的文件
# lsof -i TCP:22
(补充:这里以显示 TCP 的 22 端口已打开的文件为例)
3.4.8 显示某几个 TCP 端口打开的文件
# lsof -i TCP:1-1024
(补充:这里以显示 TCP 的 1 端口到 1024 端口打开的文件为例)