蓬森莉 发表于 2025-12-23 21:30:01

Linux系统资源排查以及修改限制

目录

[*]系统资源排查

[*]内存资源
[*]磁盘资源
[*]进程资源

[*]系统资源限制

[*]Cgroup级别
[*]系统级别

[*]

[*]修改/etc/sysctl.conf


[*]用户级别


系统资源排查

内存资源


[*]最常用的内存查看命令
free -h                  # 人类可读格式(GB/MB)
free -m                  # 以MB为单位
free -g                  # 以GB为单位
free -t                  # 显示总计行
cat /proc/meminfo          # 查看所有内存信息# free -h
            total      used      free      sharedbuff/cache   available
Mem:         3.7G      295M      3.2G         19M      161M      3.2G
Swap:          3.9G          0B      3.9G各列含义:

[*]total:总内存
[*]used:已使用内存
[*]free:空闲内存
[*]shared:共享内存
[*]buff/cache:缓冲区/缓存内存(可回收)
[*]available:可用内存(包括可回收的缓存)
内存健康检查脚本
#!/bin/bash
# memory_check.sh

echo "=== 内存健康检查报告 ==="
echo "检查时间: $(date)"
echo ""

echo "1. 内存使用概览:"
echo "----------------"
free -h
echo ""

echo "2. 关键内存指标:"
echo "----------------"
awk '
BEGIN {print "指标            值             单位"}
/MemTotal/ {printf "总内存          %12.2f GB\n", $2/1024/1024}
/MemFree/ {printf "空闲内存      %12.2f GB\n", $2/1024/1024}
/MemAvailable/ {printf "可用内存      %12.2f GB\n", $2/1024/1024}
/Buffers/ {printf "缓冲区          %12.2f GB\n", $2/1024/1024}
/Cached/ {printf "缓存            %12.2f GB\n", $2/1024/1024}
/SwapTotal/ {printf "总Swap         %12.2f GB\n", $2/1024/1024}
/SwapFree/ {printf "空闲Swap       %12.2f GB\n", $2/1024/1024}
/SwapCached/ {printf "Swap缓存       %12.2f GB\n", $2/1024/1024}
/Dirty/ {printf "脏页            %12.2f MB\n", $2/1024}
' /proc/meminfo
echo ""

echo "3. 内存使用前10的进程:"
echo "----------------"
ps aux --sort=-rss | head -11
echo ""

echo "4. Swap使用情况:"
echo "----------------"
swapon --show
echo ""

echo "5. 内存压力指标:"
echo "----------------"
# 检查内存压力
PRESSURE=$(cat /proc/pressure/memory 2>/dev/null || echo "无pressure信息")
if [ "$PRESSURE" != "无pressure信息" ]; then
    echo "$PRESSURE"
else
    # 使用传统方法估计
    AVAIL=$(free -m | awk '/^Mem:/ {print $7}')
    TOTAL=$(free -m | awk '/^Mem:/ {print $2}')
    RATIO=$((AVAIL*100/TOTAL))
    echo "内存可用率: ${RATIO}%"
    if [ $RATIO -lt 10 ]; then
      echo "警告: 内存可用率低于10%!"
    fi
fi磁盘资源


[*]查看磁盘使用情况
# 基本用法
df                         # 默认以1K blocks显示
df -h                      # 人类可读格式(GB/MB)
df -hT                     # 显示文件系统类型
df -i                      # 查看inode使用情况
df -Th                     # 类型+人类可读格式

# 按使用率排序
df -h | sort -k5 -rh       # 按使用百分比降序排序

# 查看特定文件系统
df -h /home                # 查看/home分区
df -h /var /tmp /home      # 查看多个目录

# 排除特定文件系统类型
df -h -x tmpfs -x devtmpfs # 排除tmpfs和devtmpfs

[*]查看目录占用空间
# 查看当前目录总大小
du -sh                      # 显示总大小
du -sh *                  # 显示每个文件/目录大小
du -sh .[!.]*               # 显示隐藏文件大小

# 深度查看
du -h --max-depth=1         # 只显示一级子目录
du -h --max-depth=2         # 显示两级子目录

# 排序查看
du -sh * | sort -rh         # 按大小降序排列
du -sh * | sort -h          # 按大小升序排列

# 查找大文件
du -ah /path | sort -rh | head -20    # 查找大文件
du -ah /path --exclude="*.log" | sort -rh | head -20# 排除日志文件

# 实时监控目录变化
watch -n 5 'du -sh /var/log'

[*]详细磁盘信息
# 查看所有块设备
lsblk                     # 树状显示
lsblk -f                  # 显示文件系统信息
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,LABEL# 自定义输出列
lsblk -d -o NAME,SIZE,TYPE,ROTA,RM,SCHED    # 查看磁盘属性

# JSON格式输出
lsblk -J
lsblk --json进程资源


[*]ps - 进程快照
# 查看所有进程
ps aux                     # BSD格式,最常用
ps -ef                     # UNIX格式
ps -eLf                  # 显示线程(LWP)

# 按资源排序
ps aux --sort=-%cpu | head -10      # 按CPU使用排序
ps aux --sort=-%mem | head -10      # 按内存使用排序
ps aux --sort=-rss | head -10       # 按实际内存排序
ps aux --sort=-vsz | head -10       # 按虚拟内存排序

# 查看特定进程
ps aux | grep nginx               # 查找nginx进程
ps -p 1234 -o pid,ppid,user,%cpu,%mem,cmd# 查看指定PID
ps -C nginx -o pid,cmd,%cpu,%mem    # 查看指定命令

# 树状显示进程关系
ps auxf                           # 显示进程树
ps -ejH                           # 显示进程层级
ps -e --forest                      # 树状图显示

# 自定义输出格式
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -10
ps axo pid,user,comm,rss,vsz,%mem,%cpu --sort=-rss | head -10

[*]pgrep/pkill - 进程查找/杀除
# 查找进程
pgrep nginx                      # 查找nginx进程的PID
pgrep -u root                  # 查找root用户的进程
pgrep -f "nginx.*master"         # 通过完整命令行查找
pgrep -l nginx                   # 显示进程名和PID

# 查找并显示详细信息
pgrep nginx | xargs ps -p      # 查找并显示详细信息

# 杀除进程
pkill nginx                      # 杀除nginx进程
pkill -9 nginx                   # 强制杀除
pkill -u username                # 杀除用户的进程
pkill -f "pattern"               # 通过模式杀除

# 发送信号
pkill -HUP nginx               # 发送HUP信号
pkill -USR1 nginx                # 发送USR1信号

[*]进程网络连接
# 查看进程网络连接
ss -tunap                      # 显示所有连接
ss -tunap | grep $PID          # 查看特定进程
ss -tunap | grep :80         # 查看80端口连接

# 查看监听端口
ss -tunlp                      # 显示监听端口
ss -tunlp | grep nginx         # 查看nginx监听

# 统计信息
ss -s                        # socket统计摘要
ss -t state established      # 只显示已建立连接
ss -t state established | wc -l      # 已建立连接数

# 按进程显示
ss -tup                        # 显示进程信息系统资源限制

Linux系统提供了多层次的资源限制机制,主要分为以下几个级别:

[*]Cgroup级别最精细,适合现代容器化环境
[*]系统级别设定全局天花板
[*]用户级别实现多用户公平共享
[*]进程级别保证继承性和安全性
[*]会话级别提供临时调整灵活性

[*]Cgroup级别(Control Groups)
作用域:进程组/容器/服务单元
位置:/sys/fs/cgroup/ (cgroup v2)
实现:内核cgroup子系统
# 层级结构示例
/sys/fs/cgroup/
├── system.slice/          # 系统服务
├── user.slice/         # 用户会话
├── docker/               # Docker容器
└── kubepods/             # Kubernetes Pods特点与作用:

[*]资源隔离:CPU、内存、IO、网络完全隔离
[*]层次化控制:父子cgroup继承和覆盖限制
[*]动态调整:运行时可以修改限制
[*]统计监控:提供详细的资源使用统计
[*]现代容器基础:Docker、Kubernetes的核心依赖
应用场景:

[*]容器化部署(Docker、Podman)
[*]云原生应用(Kubernetes)
[*]系统服务资源隔离(systemd)
[*]多租户环境资源保障

[*]系统级别(System-wide)
作用域:整个操作系统
位置:/proc/sys/、/etc/sysctl.conf
实现:内核运行时参数
# 关键参数示例
/proc/sys/fs/file-max         # 系统总文件描述符数
/proc/sys/kernel/pid_max      # 系统最大PID数
/proc/sys/vm/max_map_count      # 最大内存映射区域特点与作用:

[*]全局上限:为所有用户/进程设置天花板
[*]内核行为控制:影响内核资源管理策略
[*]需要root权限:只有root可以修改
[*]影响深远:修改不当可能导致系统不稳定
应用场景:

[*]服务器性能调优
[*]防止系统级资源耗尽
[*]内核行为定制

[*]用户级别(User/Group)
作用域:特定用户或用户组
位置:/etc/security/limits.conf、/etc/security/limits.d/
实现:PAM(Pluggable Authentication Modules)
# 配置格式解析
# domain    type    item      value
user1       hard    nofile      10000    # 硬限制,不可超过
user1       soft    nofile      5000   # 软限制,可临时超过
@devs       -       nproc       200      # 组限制
*         hard    core      0      # 所有用户特点与作用:

[*]基于登录会话:用户登录时通过PAM应用
[*]软硬限制:soft(当前限制)vs hard(最大限制)
[*]持久化配置:配置文件重启后保持
[*]需要重新登录:修改后用户需重新登录生效
应用场景:

[*]多用户服务器(如学校、公司)
[*]不同用户不同权限(如开发vs运维)
[*]防止用户消耗过多资源

[*]进程级别(Process/Thread)
作用域:单个进程及其线程
位置:/proc//limits、进程控制块(PCB)
实现:内核进程描述符
# 进程限制继承关系
父进程 limits → fork() → 子进程继承 → execve() → 保持限制

# 进程树限制查看
pstree -p | xargs -I {} cat /proc/{}/limits 2>/dev/null特点与作用:

[*]继承性:子进程继承父进程限制
[*]运行时不可增加:只能降低不能提高(除非有CAP_SYS_RESOURCE)
[*]线程共享:同一进程的所有线程共享限制
[*]实时查看:通过/proc文件系统动态查看
应用场景:

[*]进程资源监控和调试
[*]安全沙箱(如chroot环境)
[*]服务进程资源控制

[*]会话级别(Shell/Session)
作用域:当前shell会话及其子进程
位置:shell内置变量、环境
实现:ulimit命令(bash内置)、setrlimit()系统调用
# 临时修改,会话结束失效
ulimit -n 65535      # 仅当前shell
(ulimit -n 65535; command)# 仅子shell特点与作用:

[*]临时性:退出shell后失效
[*]便捷性:快速测试不同限制
[*]子进程继承:在shell中启动的进程继承限制
[*]无法突破硬限制:只能设置在硬限制范围内
应用场景:

[*]临时测试应用程序
[*]开发环境调试
[*]脚本中临时调整限制
优先级层次(从高到低):
Cgroup限制 > 系统限制 > 用户限制 > 进程限制 > 会话限制
Cgroup级别


[*]查看Cgroup版本
cgroup v1:每个控制器单独挂载(cpu、memory等)
cgroup v2:统一挂载,分层控制
mount | grep cgroup# centos7.9环境
# mount | grep cgroup
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,freezer)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuset)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuacct,cpu)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,hugetlb)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,memory)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,pids)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,perf_event)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,net_prio,net_cls)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,devices)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,blkio)#Ubuntu2404环境
root@huhy:~# mount | grep cgroup
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot)系统级别


[*]通过/proc/sys文件系统查看
# 1. 文件描述符相关
cat /proc/sys/fs/file-max         # 系统总文件描述符数
cat /proc/sys/fs/file-nr            # 当前已分配/使用/最大文件描述符数
cat /proc/sys/fs/nr_open            # 单进程最大文件描述符数

# 2. 进程相关
cat /proc/sys/kernel/pid_max      # 系统最大进程数
cat /proc/sys/kernel/threads-max    # 系统最大线程数

# 3. 内存相关
cat /proc/sys/vm/max_map_count      # 最大内存映射区域数(影响Java等)
cat /proc/sys/vm/overcommit_memory# 内存分配策略
cat /proc/sys/vm/overcommit_ratio   # 内存过量使用比例

# 4. 网络相关
cat /proc/sys/net/core/somaxconn    # TCP连接队列最大长度
cat /proc/sys/net/ipv4/tcp_max_syn_backlog# SYN队列长度
cat /proc/sys/net/core/netdev_max_backlog   # 网卡接收队列长度

[*]使用sysctl命令查看
# 查看所有内核参数
sysctl -a

# 按类别查看
sysctl -a | grep "^fs\."
sysctl -a | grep "^kernel\."
sysctl -a | grep "^vm\."
sysctl -a | grep "^net\."

# 查看特定参数
sysctl fs.file-max
sysctl kernel.pid_max
sysctl vm.max_map_count

# 查看多个参数
sysctl fs.file-max kernel.pid_max vm.max_map_count修改系统级别资源限制


[*]修改/etc/sysctl.conf
# 备份原始配置
cp /etc/sysctl.conf /etc/sysctl.conf.backup

# 编辑配置文件
vi /etc/sysctl.conf


# 添加或修改以下参数(示例配置):
# --------------------------------------------------
# 文件系统相关
fs.file-max = 2097152          # 系统最大文件描述符数
fs.nr_open = 1048576         # 进程最大文件描述符数

# 内核进程相关
kernel.pid_max = 65536         # 系统最大进程数
kernel.threads-max = 65536   # 系统最大线程数
kernel.sysrq = 1               # 启用SysRq键

# 虚拟内存相关
vm.swappiness = 10             # 减少swap使用倾向(0-100)
vm.vfs_cache_pressure = 50   # 目录项和inode缓存压力
vm.overcommit_memory = 0       # 内存分配策略:0-启发式,1-总是,2-拒绝
vm.overcommit_ratio = 50       # 允许过量使用的内存百分比
vm.max_map_count = 262144      # 最大内存映射区域数(重要!)

# 网络相关
net.core.somaxconn = 65535   # TCP连接队列最大长度
net.core.netdev_max_backlog = 5000# 网卡接收队列长度
net.core.rmem_max = 16777216   # 最大接收缓冲区
net.core.wmem_max = 16777216   # 最大发送缓冲区
net.ipv4.ip_local_port_range = 10000 65000 # 本地端口范围(扩大临时端口范围)

# IPv4相关
net.ipv4.tcp_max_syn_backlog = 8192# SYN队列长度
net.ipv4.tcp_syncookies = 1    # 启用SYN cookies
net.ipv4.ip_local_port_range = 1024 65000# 本地端口范围

# IPv6相关
net.ipv6.conf.all.disable_ipv6 = 0   # 不禁用IPv6
net.ipv6.conf.default.forwarding = 1
# --------------------------------------------------

[*]使配置立即生效
sysctl -p用户级别


[*]查看当前用户的所有限制
ulimit -acore file size          (blocks, -c) 0    # 核心转储文件最大大小,0表示禁用生成core文件
data seg size         (kbytes, -d) unlimited    # 进程数据段最大内存限制;无影响,不限制内存使用
scheduling priority             (-e) 0    # 进程调度优先级,0为默认;无影响,不影响资源分配
file size               (blocks, -f) unlimited    # 进程可创建的最大文件大小;无影响,不限制文件大小
pending signals               (-i) 14989    # 进程可挂起的最大信号数量;低影响,数值足够,不会触发限制
max locked memory       (kbytes, -l) 64    # 进程可锁定的最大内存(KB)
max memory size         (kbytes, -m) unlimited    # 进程可使用的最大物理内存;无影响,不限制内存使用
open files                      (-n) 1024    # 单个进程可打开的最大文件句柄数;高风险!默认1024过小
pipe size            (512 bytes, -p) 8    # 管道缓冲区大小(8*512=4096字节);无影响,默认值足够
POSIX message queues   (bytes, -q) 819200    # POSIX消息队列最大字节数
real-time priority            (-r) 0    # 实时进程调度优先级;无影响,非实时系统无需调整
stack size            (kbytes, -s) 8192    # 进程栈空间最大大小(KB)
cpu time               (seconds, -t) unlimited    # 进程可使用的最大CPU时间;无影响,不限制CPU使用时长
max user processes            (-u) 14989    # 单个用户可创建的最大进程/线程数;核心影响!若服务器进程数接近该值,无法fork新进程,触发Resource unavailable
virtual memory          (kbytes, -v) unlimited    # 进程可使用的最大虚拟内存;无影响,不限制虚拟内存使用
file locks                      (-x) unlimited    # 进程可持有的最大文件锁数量;无影响,不限制文件锁

[*]查看其他用户的限制
su - <用户名> -c 'ulimit -a'修改用户级别限制


[*]临时修改(当前会话有效)
# 修改当前shell的限制(仅当前会话有效)
ulimit -n 65536          # 设置打开文件数为65536
ulimit -u 4096         # 设置最大进程数为4096
ulimit -c unlimited      # 允许生成无限大的core文件
ulimit -s unlimited      # 设置栈大小为无限制

# 修改硬限制(需要先设置硬限制较高)
# 注意:普通用户只能降低硬限制,不能提高
ulimit -Hn 65536
ulimit -Hu 4096

[*]永久修改用户限制
修改/etc/security/limits.conf(主配置文件)
# 备份原始配置
sudo cp /etc/security/limits.conf /etc/security/limits.conf.backup.$(date +%Y%m%d)

# 编辑配置文件
sudo vi /etc/security/limits.conf

# 文件格式说明:
# <domain>    <type>    <item>    <value>
# domain可以是:用户名、@组名、*(所有用户)
# type可以是:soft、hard、-(both)
# item是资源类型(nofile、nproc等)
# value是限制值,可以是数字或unlimited

# =================================================
# 示例配置:
# 为所有用户设置基础限制
*               soft    nofile   10240
*               hard    nofile   65536
*               soft    nproc      1024
*               hard    nproc      4096
*               soft    core       0         # 禁止生成core文件
*               hard    core       0

# 为特定用户alice设置更高限制
alice         soft    nofile   65536
alice         hard    nofile   262144
alice         soft    nproc      4096
alice         hard    nproc      16384
alice         soft    memlock    unlimited
alice         hard    memlock    unlimited

# 为用户组developers设置限制
@developers   soft    nofile   32768
@developers   hard    nofile   131072
@developers   -       nproc      2048
@developers   -       core       1073741824# 1GB core文件

# 为系统用户nginx设置限制
nginx         -       nofile   65536
nginx         -       nproc      4096
nginx         -       memlock    unlimited

# 为MySQL用户设置特殊限制
mysql         soft    nofile   65536
mysql         hard    nofile   65536
mysql         soft    nproc      unlimited
mysql         hard    nproc      unlimited
# =================================================

# 保存后,用户需要重新登录才能生效

[*]常用资源项说明
项目说明推荐值示例nofile打开文件描述符数服务: 65536+ 用户: 4096+hard nofile 65536nproc最大进程数服务: 4096+ 用户: 1024+hard nproc 4096core核心转储文件大小调试: unlimited 生产: 0soft core 0memlock锁定内存大小数据库: unlimitedhard memlock unlimitedstack栈大小默认: 8192KBsoft stack 32768data数据段大小大内存应用: unlimitedhard data unlimitedas虚拟内存大小通常unlimitedhard as unlimitedfsize文件大小根据需求hard fsize 1073741824cpuCPU时间(分钟)限制恶意进程hard cpu 1000maxlogins最大登录数防止多登录hard maxlogins 3maxsyslogins系统最大登录数系统级限制hard maxsyslogins 100priority进程优先级nice值soft priority 0
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

炀餮氢 发表于 2026-1-15 05:09:47

感谢分享

睁扼妤 发表于 2026-1-15 09:35:07

谢谢分享,辛苦了

阜逐忍 发表于 2026-1-18 05:00:46

鼓励转贴优秀软件安全工具和文档!

杠氯 发表于 2026-1-20 06:28:16

感谢发布原创作品,程序园因你更精彩

赶塑坠 发表于 2026-1-20 08:42:36

收藏一下   不知道什么时候能用到

顾星 发表于 2026-1-21 17:12:22

过来提前占个楼

扈怀易 发表于 2026-1-22 10:51:44

东西不错很实用谢谢分享

稞冀 发表于 2026-1-23 11:27:10

喜欢鼓捣这些软件,现在用得少,谢谢分享!

路逸思 发表于 2026-1-27 06:37:01

过来提前占个楼

赖秀竹 发表于 2026-1-29 06:24:40

谢谢分享,辛苦了

唐茗 发表于 2026-2-6 09:09:13

不错,里面软件多更新就更好了

方方仪 发表于 2026-2-7 05:36:54

不错,里面软件多更新就更好了

崔瑜然 发表于 2026-2-7 09:45:01

感谢分享,学习下。

求几少 发表于 2026-2-8 03:06:44

喜欢鼓捣这些软件,现在用得少,谢谢分享!

彭水晶 发表于 2026-2-8 11:52:26

很好很强大我过来先占个楼 待编辑

蒙飘 发表于 2026-2-9 01:12:07

谢谢楼主提供!

都淑贞 发表于 2026-2-9 18:29:32

过来提前占个楼

禄磊 发表于 2026-2-10 02:27:06

这个有用。

赀倦 发表于 2026-2-10 16:08:41

新版吗?好像是停更了吧。
页: [1] 2
查看完整版本: Linux系统资源排查以及修改限制