简体中文 繁體中文 English 日本語 Deutsch 한국 사람 بالعربية TÜRKÇE português คนไทย Français

站内搜索

搜索

活动公告

11-02 12:46
10-23 09:32
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,将及时处理!
10-23 09:31
10-23 09:28
通知:签到时间调整为每日4:00(东八区)
10-23 09:26

CentOS Stream资源管理全面指南从基础配置到高级优化技巧助你轻松掌控系统资源提升服务器性能与稳定性

3万

主题

423

科技点

3万

积分

大区版主

木柜子打湿

积分
31916

三倍冰淇淋无人之境【一阶】财Doro小樱(小丑装)立华奏以外的星空【二阶】⑨的冰沙

发表于 2025-10-4 19:00:09 | 显示全部楼层 |阅读模式 [标记阅至此楼]

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
引言

CentOS Stream作为RHEL(Red Hat Enterprise Linux)的上游开发平台,为企业和个人用户提供了一个稳定、可靠且功能丰富的操作系统环境。在当今数据驱动的世界中,有效管理系统资源是确保服务器性能、稳定性和安全性的关键。本文将全面介绍CentOS Stream中的资源管理技术,从基础配置到高级优化技巧,帮助您更好地掌控系统资源,提升服务器性能与稳定性。

系统资源监控工具

有效的资源管理始于准确的监控。CentOS Stream提供了多种工具来监控系统资源使用情况。

top命令

top是最常用的实时系统监控工具之一,可以显示系统中运行的进程以及它们对系统资源的使用情况。
  1. top
复制代码

运行top命令后,您会看到一个实时更新的界面,显示CPU使用率、内存使用情况、运行中的进程等信息。按q键退出top。

htop命令

htop是top的增强版,提供了更友好的用户界面和更多功能。
  1. # 安装htop
  2. sudo dnf install htop
  3. # 运行htop
  4. htop
复制代码

htop支持鼠标操作,可以使用F键进行各种操作,如排序进程、杀死进程等。

vmstat命令

vmstat报告关于进程、内存、分页、块IO、陷阱(中断)和CPU活动的信息。
  1. # 每2秒更新一次,共更新5次
  2. vmstat 2 5
复制代码

输出示例:
  1. procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
  2. r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
  3. 1  0      0 777420  21068 347856    0    0    41    18   57   89  1  1 97  1  0
复制代码

iostat命令

iostat用于监控系统输入/输出设备和CPU的使用情况。
  1. # 安装sysstat包(包含iostat)
  2. sudo dnf install sysstat
  3. # 显示CPU和设备统计信息
  4. iostat
  5. # 每2秒更新一次,共更新3次
  6. iostat 2 3
复制代码

sar命令

sar(System Activity Reporter)是sysstat包的一部分,用于收集、报告和保存系统活动信息。
  1. # 收集当天的系统活动数据
  2. sar -u
  3. # 显示内存使用情况
  4. sar -r
  5. # 显示网络统计信息
  6. sar -n DEV
复制代码

nmon命令

nmon是一个性能监控工具,可以同时监控系统的多个方面,如CPU、内存、磁盘、网络等。
  1. # 安装nmon
  2. sudo dnf install nmon
  3. # 运行nmon
  4. nmon
复制代码

nmon提供了交互式界面,可以按不同的键查看不同类型的系统资源使用情况。

CPU资源管理

CPU是系统中最关键的资源之一,有效管理CPU资源对系统性能至关重要。

查看CPU信息
  1. # 显示CPU信息
  2. lscpu
  3. # 显示/proc/cpuinfo的内容
  4. cat /proc/cpuinfo
  5. # 显示CPU核心数
  6. nproc
复制代码

CPU亲和性(CPU Affinity)

CPU亲和性是指将进程绑定到特定的CPU核心上运行,以减少缓存失效和上下文切换的开销。
  1. # 使用taskset命令设置进程的CPU亲和性
  2. # 启动一个进程并将其绑定到CPU 0和1
  3. taskset -c 0,1 your_command
  4. # 查看进程的CPU亲和性
  5. taskset -p PID
  6. # 修改运行中进程的CPU亲和性
  7. taskset -cp 0,1 PID
复制代码

CPU频率调节

CentOS Stream提供了cpufreq工具来管理CPU频率。
  1. # 安装cpufrequtils
  2. sudo dnf install cpufrequtils
  3. # 查看CPU频率信息
  4. cpufreq-info
  5. # 设置CPU频率调节策略
  6. # performance: 最高性能
  7. # powersave: 最低功耗
  8. # userspace: 用户空间控制
  9. # ondemand: 按需调节
  10. # conservative: 保守调节
  11. cpufreq-set -g performance
  12. # 设置特定CPU的频率调节策略
  13. cpufreq-set -c 0 -g performance
复制代码

使用nice和renice调整进程优先级

nice值范围从-20(最高优先级)到19(最低优先级),默认值为0。
  1. # 以指定优先级启动进程
  2. nice -n 10 your_command
  3. # 修改运行中进程的优先级
  4. renice 10 PID
  5. # 修改用户所有进程的优先级
  6. renice 10 -u username
复制代码

使用systemd管理CPU资源

systemd提供了资源控制功能,可以限制服务对CPU的使用。
  1. # 创建一个服务文件
  2. sudo nano /etc/systemd/system/myapp.service
复制代码

服务文件示例:
  1. [Unit]
  2. Description=My Application
  3. [Service]
  4. ExecStart=/path/to/your/application
  5. CPUQuota=50%  # 限制CPU使用率为50%
  6. CPUAffinity=0 1  # 绑定到CPU 0和1
  7. [Install]
  8. WantedBy=multi-user.target
复制代码
  1. # 重新加载systemd配置
  2. sudo systemctl daemon-reload
  3. # 启动服务
  4. sudo systemctl start myapp
  5. # 启用服务开机自启
  6. sudo systemctl enable myapp
复制代码

使用cgroups控制CPU资源

cgroups(控制组)是Linux内核的一个功能,可以限制、记录和隔离进程组使用的物理资源。
  1. # 安装cgroup工具
  2. sudo dnf install libcgroup-tools
  3. # 创建cgroup
  4. cgcreate -g cpu:/mygroup
  5. # 设置CPU份额(相对权重,默认1024)
  6. cgset -r cpu.shares=512 mygroup
  7. # 设置CPU使用率上限(百分比)
  8. cgset -r cpu.cfs_quota_us=50000 mygroup
  9. cgset -r cpu.cfs_period_us=100000 mygroup
  10. # 在cgroup中运行进程
  11. cgexec -g cpu:mygroup your_command
  12. # 将运行中的进程添加到cgroup
  13. cgclassify -g cpu:mygroup PID
复制代码

内存资源管理

内存是系统性能的关键因素,有效管理内存资源可以显著提高系统响应速度和稳定性。

查看内存使用情况
  1. # 显示内存使用情况
  2. free -h
  3. # 显示详细的内存使用情况
  4. cat /proc/meminfo
  5. # 显示进程的内存使用情况
  6. ps aux --sort=-%mem | head
复制代码

清理系统缓存

Linux系统会使用空闲内存作为磁盘缓存,以提高I/O性能。但在某些情况下,可能需要手动清理缓存。
  1. # 清理页缓存
  2. echo 1 > /proc/sys/vm/drop_caches
  3. # 清理目录项和inode缓存
  4. echo 2 > /proc/sys/vm/drop_caches
  5. # 清理页缓存、目录项和inode缓存
  6. echo 3 > /proc/sys/vm/drop_caches
复制代码

注意:这些命令需要root权限,并且应该谨慎使用,因为清理缓存可能会导致系统性能暂时下降。

调整虚拟内存参数

通过调整/proc/sys/vm/下的参数,可以优化系统的虚拟内存管理。
  1. # 查看当前虚拟内存参数
  2. sysctl -a | grep vm
  3. # 修改swappiness参数(控制使用交换空间的倾向,0-100)
  4. # 值越小,系统越倾向于使用物理内存;值越大,系统越倾向于使用交换空间
  5. sysctl -w vm.swappiness=10
  6. # 修改vfs_cache_pressure参数(控制回收目录项和inode缓存的倾向,默认100)
  7. # 值越小,系统越倾向于保留目录项和inode缓存
  8. sysctl -w vm.vfs_cache_pressure=50
  9. # 使修改永久生效
  10. echo "vm.swappiness=10" >> /etc/sysctl.conf
  11. echo "vm.vfs_cache_pressure=50" >> /etc/sysctl.conf
  12. sysctl -p
复制代码

使用swap空间

swap空间是硬盘上的一块区域,当物理内存不足时,系统会将不常用的内存页移动到swap空间。
  1. # 创建swap文件
  2. sudo fallocate -l 2G /swapfile
  3. sudo chmod 600 /swapfile
  4. sudo mkswap /swapfile
  5. sudo swapon /swapfile
  6. # 使swap文件永久生效
  7. echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
  8. # 调整swap使用策略
  9. # vm.swappiness参数控制使用swap的倾向,值越大,越倾向于使用swap
  10. sysctl -w vm.swappiness=10
  11. echo "vm.swappiness=10" >> /etc/sysctl.conf
  12. sysctl -p
复制代码

内存过度分配(Overcommit)

Linux内核允许内存过度分配,即分配的虚拟内存总量可以超过物理内存和swap空间的总和。
  1. # 查看当前内存过度分配策略
  2. cat /proc/sys/vm/overcommit_memory
  3. # 设置内存过度分配策略
  4. # 0: 启发式过度分配(默认)
  5. # 1: 总是允许过度分配
  6. # 2: 禁止过度分配超过swap空间+物理内存*overcommit_ratio
  7. sysctl -w vm.overcommit_memory=2
  8. # 设置过度分配比率(百分比,默认50)
  9. sysctl -w vm.overcommit_ratio=100
  10. # 使修改永久生效
  11. echo "vm.overcommit_memory=2" >> /etc/sysctl.conf
  12. echo "vm.overcommit_ratio=100" >> /etc/sysctl.conf
  13. sysctl -p
复制代码

使用cgroups控制内存资源
  1. # 创建cgroup
  2. cgcreate -g memory:/mygroup
  3. # 设置内存限制(字节)
  4. cgset -r memory.limit_in_bytes=1G mygroup
  5. # 设置内存+swap限制(字节)
  6. cgset -r memory.memsw.limit_in_bytes=2G mygroup
  7. # 在cgroup中运行进程
  8. cgexec -g memory:mygroup your_command
  9. # 将运行中的进程添加到cgroup
  10. cgclassify -g memory:mygroup PID
复制代码

使用systemd管理内存资源
  1. # 编辑服务文件
  2. sudo nano /etc/systemd/system/myapp.service
复制代码

服务文件示例:
  1. [Unit]
  2. Description=My Application
  3. [Service]
  4. ExecStart=/path/to/your/application
  5. MemoryLimit=1G  # 限制内存使用为1GB
  6. MemorySwapMax=2G  # 限制内存+swap使用为2GB
  7. [Install]
  8. WantedBy=multi-user.target
复制代码
  1. # 重新加载systemd配置
  2. sudo systemctl daemon-reload
  3. # 启动服务
  4. sudo systemctl start myapp
复制代码

磁盘I/O管理

磁盘I/O是系统性能的另一个关键因素,特别是在数据库和文件服务器等应用中。

查看磁盘使用情况
  1. # 显示磁盘空间使用情况
  2. df -h
  3. # 显示目录或文件的磁盘使用情况
  4. du -sh /path/to/directory
  5. # 显示inode使用情况
  6. df -i
  7. # 显示磁盘I/O统计信息
  8. iostat -xz 1
复制代码

磁盘性能测试
  1. # 安装hdparm
  2. sudo dnf install hdparm
  3. # 测试磁盘读取速度
  4. sudo hdparm -Tt /dev/sda
  5. # 安装fio(Flexible I/O Tester)
  6. sudo dnf install fio
  7. # 使用fio进行随机读写测试
  8. fio --name=randread --ioengine=libaio --iodepth=16 --rw=randread --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 --group_reporting --filename=/tmp/test
复制代码

文件系统优化

选择合适的文件系统和挂载选项可以显著提高磁盘I/O性能。
  1. # 查看当前文件系统类型
  2. df -T
  3. # 查看文件系统挂载选项
  4. mount | grep /dev/sda1
  5. # 修改/etc/fstab以优化文件系统挂载选项
  6. sudo nano /etc/fstab
复制代码

/etc/fstab示例:
  1. # 对于ext4文件系统,可以添加noatime选项来减少磁盘写入
  2. /dev/sda1 / ext4 defaults,noatime 0 1
复制代码

使用LVM(逻辑卷管理)

LVM提供了灵活的磁盘管理方式,可以动态调整磁盘空间。
  1. # 安装lvm2
  2. sudo dnf install lvm2
  3. # 创建物理卷
  4. sudo pvcreate /dev/sdb1
  5. # 创建卷组
  6. sudo vgcreate vg0 /dev/sdb1
  7. # 创建逻辑卷
  8. sudo lvcreate -n lv0 -L 10G vg0
  9. # 格式化逻辑卷
  10. sudo mkfs.ext4 /dev/vg0/lv0
  11. # 挂载逻辑卷
  12. sudo mkdir /mnt/data
  13. sudo mount /dev/vg0/lv0 /mnt/data
  14. # 扩展逻辑卷
  15. sudo lvextend -L +5G /dev/vg0/lv0
  16. sudo resize2fs /dev/vg0/lv0
复制代码

磁盘调度器优化

磁盘调度器决定了I/O请求的处理顺序,选择合适的调度器可以提高磁盘性能。
  1. # 查看当前磁盘调度器
  2. cat /sys/block/sda/queue/scheduler
  3. # 临时修改磁盘调度器
  4. echo noop > /sys/block/sda/queue/scheduler
  5. # 永久修改磁盘调度器(通过udev规则)
  6. sudo nano /etc/udev/rules.d/60-scheduler.rules
复制代码

udev规则示例:
  1. ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="noop"
  2. ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="deadline"
复制代码

使用cgroups控制磁盘I/O资源
  1. # 创建cgroup
  2. cgcreate -g blkio:/mygroup
  3. # 设置读取速率限制(字节/秒)
  4. cgset -r blkio.throttle.read_bps_device="8:0 1048576" mygroup
  5. # 设置写入速率限制(字节/秒)
  6. cgset -r blkio.throttle.write_bps_device="8:0 1048576" mygroup
  7. # 在cgroup中运行进程
  8. cgexec -g blkio:mygroup your_command
  9. # 将运行中的进程添加到cgroup
  10. cgclassify -g blkio:mygroup PID
复制代码

使用systemd管理磁盘I/O资源
  1. # 编辑服务文件
  2. sudo nano /etc/systemd/system/myapp.service
复制代码

服务文件示例:
  1. [Unit]
  2. Description=My Application
  3. [Service]
  4. ExecStart=/path/to/your/application
  5. IOReadBandwidthMax=/dev/sda 1M  # 限制读取带宽为1MB/s
  6. IOWriteBandwidthMax=/dev/sda 1M  # 限制写入带宽为1MB/s
  7. [Install]
  8. WantedBy=multi-user.target
复制代码
  1. # 重新加载systemd配置
  2. sudo systemctl daemon-reload
  3. # 启动服务
  4. sudo systemctl start myapp
复制代码

网络资源管理

网络资源管理对于确保服务器网络性能和稳定性至关重要。

查看网络状态
  1. # 显示网络接口信息
  2. ip addr show
  3. # 显示网络连接状态
  4. ss -tuln
  5. # 显示网络统计信息
  6. netstat -s
  7. # 显示网络带宽使用情况
  8. iftop -n
复制代码

网络接口优化
  1. # 查看网络接口参数
  2. ethtool eth0
  3. # 修改网络接口MTU(最大传输单元)
  4. ip link set eth0 mtu 9000
  5. # 启用或禁用网络接口
  6. ip link set eth0 up
  7. ip link set eth0 down
  8. # 修改网络接口队列长度
  9. ip link set eth0 txqueuelen 10000
复制代码

网络内核参数优化
  1. # 查看当前网络内核参数
  2. sysctl -a | grep net
  3. # 修改网络内核参数
  4. # 增加TCP连接队列长度
  5. sysctl -w net.core.somaxconn=65536
  6. # 增加TCP缓冲区大小
  7. sysctl -w net.core.rmem_max=16777216
  8. sysctl -w net.core.wmem_max=16777216
  9. sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
  10. sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
  11. # 启用TCP窗口缩放
  12. sysctl -w net.ipv4.tcp_window_scaling=1
  13. # 启用TCP选择性确认
  14. sysctl -w net.ipv4.tcp_sack=1
  15. # 启用TCP时间戳
  16. sysctl -w net.ipv4.tcp_timestamps=1
  17. # 启用TCP BBR拥塞控制算法
  18. sysctl -w net.ipv4.tcp_congestion_control=bbr
  19. # 使修改永久生效
  20. cat >> /etc/sysctl.conf << EOF
  21. net.core.somaxconn=65536
  22. net.core.rmem_max=16777216
  23. net.core.wmem_max=16777216
  24. net.ipv4.tcp_rmem="4096 87380 16777216"
  25. net.ipv4.tcp_wmem="4096 65536 16777216"
  26. net.ipv4.tcp_window_scaling=1
  27. net.ipv4.tcp_sack=1
  28. net.ipv4.tcp_timestamps=1
  29. net.ipv4.tcp_congestion_control=bbr
  30. EOF
  31. # 应用修改
  32. sysctl -p
复制代码

使用tc(流量控制)管理网络带宽

tc是Linux内核中的流量控制工具,可以用来限制、调度和分类网络流量。
  1. # 安装tc
  2. sudo dnf install tc
  3. # 创建根队列规则
  4. tc qdisc add dev eth0 root handle 1: htb default 30
  5. # 创建主类
  6. tc class add dev eth0 parent 1: classid 1:1 htb rate 1000mbit
  7. # 创建子类
  8. tc class add dev eth0 parent 1:1 classid 1:10 htb rate 500mbit ceil 1000mbit
  9. tc class add dev eth0 parent 1:1 classid 1:20 htb rate 300mbit ceil 1000mbit
  10. tc class add dev eth0 parent 1:1 classid 1:30 htb rate 200mbit ceil 1000mbit
  11. # 创建过滤器
  12. tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:10
  13. tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 443 0xffff flowid 1:20
  14. # 显示队列规则
  15. tc qdisc show dev eth0
  16. # 显示类
  17. tc class show dev eth0
  18. # 显示过滤器
  19. tc filter show dev eth0
  20. # 删除队列规则
  21. tc qdisc del dev eth0 root
复制代码

使用cgroups控制网络资源
  1. # 创建cgroup
  2. cgcreate -g net_cls:/mygroup
  3. # 设置网络类ID
  4. cgset -r net_cls.classid=0x00100001 mygroup
  5. # 创建tc过滤器以匹配cgroup
  6. tc filter add dev eth0 parent 1:0 protocol ip prio 10 handle 1: cgroup
  7. # 在cgroup中运行进程
  8. cgexec -g net_cls:mygroup your_command
  9. # 将运行中的进程添加到cgroup
  10. cgclassify -g net_cls:mygroup PID
复制代码

使用Firewalld管理网络访问

Firewalld是CentOS Stream中的默认防火墙管理工具,可以简化防火墙配置。
  1. # 启动并启用firewalld
  2. sudo systemctl start firewalld
  3. sudo systemctl enable firewalld
  4. # 查看防火墙状态
  5. sudo firewall-cmd --state
  6. # 查看默认区域
  7. sudo firewall-cmd --get-default-zone
  8. # 查看活动区域
  9. sudo firewall-cmd --get-active-zones
  10. # 查看区域中的规则
  11. sudo firewall-cmd --list-all --zone=public
  12. # 开放端口
  13. sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
  14. sudo firewall-cmd --reload
  15. # 开放服务
  16. sudo firewall-cmd --permanent --zone=public --add-service=http
  17. sudo firewall-cmd --reload
  18. # 限制IP访问
  19. sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept'
  20. sudo firewall-cmd --reload
复制代码

进程和服务管理

有效管理进程和服务是系统资源管理的重要组成部分。

查看和管理进程
  1. # 查看所有进程
  2. ps aux
  3. # 查看特定进程
  4. ps aux | grep process_name
  5. # 查看进程树
  6. pstree
  7. # 查看进程打开的文件
  8. lsof -p PID
  9. # 查看进程内存映射
  10. cat /proc/PID/maps
  11. # 终止进程
  12. kill PID
  13. kill -9 PID  # 强制终止
  14. # 终止所有同名进程
  15. killall process_name
  16. pkill process_name
复制代码

使用systemd管理服务
  1. # 启动服务
  2. sudo systemctl start service_name
  3. # 停止服务
  4. sudo systemctl stop service_name
  5. # 重启服务
  6. sudo systemctl restart service_name
  7. # 重新加载服务配置
  8. sudo systemctl reload service_name
  9. # 启用服务开机自启
  10. sudo systemctl enable service_name
  11. # 禁用服务开机自启
  12. sudo systemctl disable service_name
  13. # 查看服务状态
  14. sudo systemctl status service_name
  15. # 查看所有服务状态
  16. sudo systemctl list-units --type=service
  17. # 查看服务日志
  18. sudo journalctl -u service_name
  19. # 查看服务实时日志
  20. sudo journalctl -fu service_name
复制代码

使用systemd管理服务资源限制
  1. # 创建或编辑服务文件
  2. sudo nano /etc/systemd/system/myapp.service
复制代码

服务文件示例:
  1. [Unit]
  2. Description=My Application
  3. After=network.target
  4. [Service]
  5. ExecStart=/path/to/your/application
  6. User=myuser
  7. Group=mygroup
  8. # CPU限制
  9. CPUQuota=50%
  10. CPUAffinity=0 1
  11. # 内存限制
  12. MemoryLimit=1G
  13. MemorySwapMax=2G
  14. # 磁盘I/O限制
  15. IOReadBandwidthMax=/dev/sda 1M
  16. IOWriteBandwidthMax=/dev/sda 1M
  17. # 进程数限制
  18. TasksMax=100
  19. # 文件描述符限制
  20. LimitNOFILE=65536
  21. # 重启策略
  22. Restart=on-failure
  23. RestartSec=5s
  24. [Install]
  25. WantedBy=multi-user.target
复制代码
  1. # 重新加载systemd配置
  2. sudo systemctl daemon-reload
  3. # 启动服务
  4. sudo systemctl start myapp
  5. # 启用服务开机自启
  6. sudo systemctl enable myapp
复制代码

使用cron和systemd timer管理定时任务
  1. # 编辑cron任务
  2. crontab -e
复制代码

crontab示例:
  1. # 每天凌晨3点执行备份脚本
  2. 0 3 * * * /path/to/backup_script.sh
  3. # 每小时执行一次系统清理脚本
  4. 0 * * * * /path/to/cleanup_script.sh
复制代码

使用systemd timer管理定时任务:
  1. # 创建服务文件
  2. sudo nano /etc/systemd/system/mytask.service
复制代码

服务文件示例:
  1. [Unit]
  2. Description=My Task
  3. [Service]
  4. ExecStart=/path/to/mytask.sh
  5. User=myuser
  6. Group=mygroup
复制代码
  1. # 创建timer文件
  2. sudo nano /etc/systemd/system/mytask.timer
复制代码

timer文件示例:
  1. [Unit]
  2. Description=Run mytask daily
  3. [Timer]
  4. OnCalendar=daily
  5. Persistent=true
  6. [Install]
  7. WantedBy=timers.target
复制代码
  1. # 启用并启动timer
  2. sudo systemctl enable mytask.timer
  3. sudo systemctl start mytask.timer
  4. # 查看timer状态
  5. sudo systemctl list-timers --all
复制代码

系统性能调优

系统性能调优是一个综合性的过程,需要考虑多个方面。

内核参数调优
  1. # 查看当前内核参数
  2. sysctl -a
  3. # 修改内核参数
  4. # 增加文件描述符限制
  5. sysctl -w fs.file-max=1000000
  6. # 增加进程数限制
  7. sysctl -w kernel.threads-max=1000000
  8. sysctl -w kernel.pid_max=4194304
  9. # 优化虚拟内存管理
  10. sysctl -w vm.swappiness=10
  11. sysctl -w vm.dirty_ratio=60
  12. sysctl -w vm.dirty_background_ratio=2
  13. # 优化网络参数
  14. sysctl -w net.core.netdev_max_backlog=10000
  15. sysctl -w net.ipv4.tcp_max_syn_backlog=65536
  16. sysctl -w net.ipv4.tcp_fin_timeout=10
  17. sysctl -w net.ipv4.tcp_keepalive_time=1200
  18. sysctl -w net.ipv4.tcp_max_tw_buckets=5000
  19. sysctl -w net.ipv4.ip_local_port_range="1024 65535"
  20. # 使修改永久生效
  21. cat >> /etc/sysctl.conf << EOF
  22. fs.file-max=1000000
  23. kernel.threads-max=1000000
  24. kernel.pid_max=4194304
  25. vm.swappiness=10
  26. vm.dirty_ratio=60
  27. vm.dirty_background_ratio=2
  28. net.core.netdev_max_backlog=10000
  29. net.ipv4.tcp_max_syn_backlog=65536
  30. net.ipv4.tcp_fin_timeout=10
  31. net.ipv4.tcp_keepalive_time=1200
  32. net.ipv4.tcp_max_tw_buckets=5000
  33. net.ipv4.ip_local_port_range="1024 65535"
  34. EOF
  35. # 应用修改
  36. sysctl -p
复制代码

文件系统调优
  1. # 查看文件系统挂载选项
  2. mount | grep /dev/sda1
  3. # 修改/etc/fstab以优化文件系统挂载选项
  4. sudo nano /etc/fstab
复制代码

/etc/fstab示例:
  1. # 对于ext4文件系统,可以添加以下选项:
  2. # noatime: 不更新访问时间,减少磁盘写入
  3. # nodiratime: 不更新目录访问时间,减少磁盘写入
  4. # data=writeback: 提高性能,但可能在断电时导致数据损坏
  5. # barrier=0: 禁用屏障,提高性能,但可能在断电时导致文件系统损坏
  6. /dev/sda1 / ext4 defaults,noatime,nodiratime,data=writeback,barrier=0 0 1
复制代码

I/O调度器调优
  1. # 查看当前I/O调度器
  2. cat /sys/block/sda/queue/scheduler
  3. # 临时修改I/O调度器
  4. echo deadline > /sys/block/sda/queue/scheduler
  5. # 永久修改I/O调度器(通过udev规则)
  6. sudo nano /etc/udev/rules.d/60-scheduler.rules
复制代码

udev规则示例:
  1. # 对于SSD,使用noop或deadline调度器
  2. ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="noop"
  3. # 对于HDD,使用deadline或cfq调度器
  4. ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="deadline"
复制代码

CPU调优
  1. # 查看CPU频率调节策略
  2. cpufreq-info
  3. # 设置CPU频率调节策略
  4. cpufreq-set -g performance
  5. # 查看CPU亲和性
  6. taskset -p PID
  7. # 设置进程的CPU亲和性
  8. taskset -cp 0,1 PID
复制代码

内存调优
  1. # 查看内存使用情况
  2. free -h
  3. # 清理系统缓存
  4. echo 3 > /proc/sys/vm/drop_caches
  5. # 调整虚拟内存参数
  6. sysctl -w vm.swappiness=10
  7. sysctl -w vm.vfs_cache_pressure=50
  8. sysctl -w vm.dirty_ratio=60
  9. sysctl -w vm.dirty_background_ratio=2
复制代码

使用tuned进行系统调优

tuned是CentOS Stream中的一个系统调优守护进程,可以根据不同的使用场景自动调整系统参数。
  1. # 安装tuned
  2. sudo dnf install tuned
  3. # 启动并启用tuned
  4. sudo systemctl start tuned
  5. sudo systemctl enable tuned
  6. # 查看可用的调优配置文件
  7. sudo tuned-adm list
  8. # 查看当前活动的调优配置文件
  9. sudo tuned-adm active
  10. # 切换调优配置文件
  11. sudo tuned-adm profile throughput-performance
  12. # 创建自定义调优配置文件
  13. sudo mkdir /etc/tuned/myprofile
  14. sudo nano /etc/tuned/myprofile/tuned.conf
复制代码

tuned.conf示例:
  1. [main]
  2. summary=Custom profile for my application
  3. include=throughput-performance
  4. [sysctl]
  5. vm.swappiness=10
  6. vm.dirty_ratio=60
  7. vm.dirty_background_ratio=2
  8. net.ipv4.tcp_congestion_control=bbr
  9. [cpu]
  10. governor=performance
  11. energy_perf_bias=performance
  12. min_perf_pct=100
复制代码
  1. # 启用自定义调优配置文件
  2. sudo tuned-adm profile myprofile
复制代码

资源限制与控制

资源限制与控制是确保系统稳定性和公平分配资源的重要手段。

使用ulimit设置用户资源限制

ulimit用于控制shell启动进程所占用的资源。
  1. # 查看当前资源限制
  2. ulimit -a
  3. # 设置进程最大文件描述符数
  4. ulimit -n 65536
  5. # 设置进程最大内存大小(KB)
  6. ulimit -v 1048576
  7. # 设置进程最大CPU时间(秒)
  8. ulimit -t 3600
  9. # 设置进程最大文件大小
  10. ulimit -f 1024000
  11. # 使修改永久生效(针对特定用户)
  12. echo "ulimit -n 65536" >> /home/username/.bashrc
  13. echo "ulimit -v 1048576" >> /home/username/.bashrc
  14. echo "ulimit -t 3600" >> /home/username/.bashrc
  15. echo "ulimit -f 1024000" >> /home/username/.bashrc
  16. # 使修改永久生效(全局)
  17. echo "* soft nofile 65536" >> /etc/security/limits.conf
  18. echo "* hard nofile 65536" >> /etc/security/limits.conf
  19. echo "* soft nproc 4096" >> /etc/security/limits.conf
  20. echo "* hard nproc 4096" >> /etc/security/limits.conf
复制代码

使用cgroups进行资源控制

cgroups是Linux内核的一个功能,可以限制、记录和隔离进程组使用的物理资源。
  1. # 安装cgroup工具
  2. sudo dnf install libcgroup-tools
  3. # 创建cgroup
  4. cgcreate -g cpu,memory,blkio,net_cls:/mygroup
  5. # 设置CPU限制
  6. cgset -r cpu.shares=512 mygroup
  7. cgset -r cpu.cfs_quota_us=50000 mygroup
  8. cgset -r cpu.cfs_period_us=100000 mygroup
  9. # 设置内存限制
  10. cgset -r memory.limit_in_bytes=1G mygroup
  11. cgset -r memory.memsw.limit_in_bytes=2G mygroup
  12. # 设置磁盘I/O限制
  13. cgset -r blkio.throttle.read_bps_device="8:0 1048576" mygroup
  14. cgset -r blkio.throttle.write_bps_device="8:0 1048576" mygroup
  15. # 设置网络类ID
  16. cgset -r net_cls.classid=0x00100001 mygroup
  17. # 在cgroup中运行进程
  18. cgexec -g cpu,memory,blkio,net_cls:mygroup your_command
  19. # 将运行中的进程添加到cgroup
  20. cgclassify -g cpu,memory,blkio,net_cls:mygroup PID
  21. # 查看cgroup中的进程
  22. cgget -g cpu,memory,blkio,net_cls:mygroup
  23. # 删除cgroup
  24. cgdelete -g cpu,memory,blkio,net_cls:/mygroup
复制代码

使用systemd进行资源控制

systemd提供了资源控制功能,可以限制服务对系统资源的使用。
  1. # 创建或编辑服务文件
  2. sudo nano /etc/systemd/system/myapp.service
复制代码

服务文件示例:
  1. [Unit]
  2. Description=My Application
  3. After=network.target
  4. [Service]
  5. ExecStart=/path/to/your/application
  6. User=myuser
  7. Group=mygroup
  8. # CPU限制
  9. CPUQuota=50%
  10. CPUAffinity=0 1
  11. # 内存限制
  12. MemoryLimit=1G
  13. MemorySwapMax=2G
  14. # 磁盘I/O限制
  15. IOReadBandwidthMax=/dev/sda 1M
  16. IOWriteBandwidthMax=/dev/sda 1M
  17. # 进程数限制
  18. TasksMax=100
  19. # 文件描述符限制
  20. LimitNOFILE=65536
  21. # 重启策略
  22. Restart=on-failure
  23. RestartSec=5s
  24. [Install]
  25. WantedBy=multi-user.target
复制代码
  1. # 重新加载systemd配置
  2. sudo systemctl daemon-reload
  3. # 启动服务
  4. sudo systemctl start myapp
  5. # 启用服务开机自启
  6. sudo systemctl enable myapp
复制代码

使用namespaces进行资源隔离

namespaces是Linux内核的一个功能,可以隔离进程的资源视图,如PID、网络、挂载点等。
  1. # 创建新的PID namespace
  2. unshare --fork --pid --mount-proc bash
  3. # 创建新的network namespace
  4. ip netns add myns
  5. ip netns exec myns bash
  6. # 创建新的mount namespace
  7. unshare --mount bash
  8. # 创建新的UTS namespace(主机名和域名)
  9. unshare --uts bash
  10. # 创建新的IPC namespace
  11. unshare --ipc bash
  12. # 创建新的user namespace
  13. unshare --user bash
复制代码

使用容器进行资源隔离

容器技术(如Docker、Podman)利用namespaces和cgroups来提供轻量级的资源隔离。
  1. # 安装Podman
  2. sudo dnf install podman
  3. # 运行容器并限制资源
  4. podman run -d --name myapp \
  5.   --cpus=1.5 \
  6.   --memory=1g \
  7.   --memory-swap=2g \
  8.   --blkio-weight=500 \
  9.   --pids-limit=100 \
  10.   myimage
  11. # 查看容器资源使用情况
  12. podman stats myapp
  13. # 更新容器资源限制
  14. podman update --cpus=2 --memory=2g myapp
复制代码

高级优化技巧

在掌握了基础资源管理后,可以应用一些高级优化技巧来进一步提升系统性能。

使用NUMA优化

NUMA(Non-Uniform Memory Access)是一种多处理器系统架构,其中内存访问时间取决于处理器的内存位置。
  1. # 查看NUMA信息
  2. numactl --hardware
  3. # 查看进程的NUMA策略
  4. numastat -p PID
  5. # 在特定NUMA节点上运行进程
  6. numactl --cpunodebind=0 --membind=0 your_command
  7. # 修改运行中进程的NUMA策略
  8. numactl --cpunodebind=0 --membind=0 -P PID
复制代码

使用huge pages优化内存访问

Huge pages是大于标准页面大小的内存页面,可以减少TLB(Translation Lookaside Buffer)未命中,提高内存访问效率。
  1. # 查看当前huge pages设置
  2. cat /proc/meminfo | grep -i huge
  3. # 临时分配huge pages
  4. echo 1024 > /proc/sys/vm/nr_hugepages
  5. # 永久分配huge pages
  6. echo "vm.nr_hugepages=1024" >> /etc/sysctl.conf
  7. sysctl -p
  8. # 挂载hugetlbfs文件系统
  9. mkdir /mnt/hugepages
  10. mount -t hugetlbfs none /mnt/hugepages
  11. # 使挂载永久生效
  12. echo "none /mnt/hugepages hugetlbfs defaults 0 0" >> /etc/fstab
  13. # 使用huge pages运行程序
  14. numactl --membind=0 --cpunodebind=0 your_command
复制代码

使用IO_URING优化I/O性能

IO_URING是Linux内核中的一种新型异步I/O接口,可以显著提高I/O密集型应用的性能。
  1. # 检查内核是否支持IO_URING
  2. ls /usr/include/linux/io_uring.h
  3. # 安装liburing开发库
  4. sudo dnf install liburing-devel
  5. # 编译使用IO_URING的程序
  6. gcc -o io_uring_app io_uring_app.c -luring
复制代码

使用XDP/eBPF优化网络性能

XDP(eXpress Data Path)和eBPF(extended Berkeley Packet Filter)是Linux内核中的高性能网络处理技术。
  1. # 安装clang和llvm(用于编译eBPF程序)
  2. sudo dnf install clang llvm
  3. # 安装libbpf开发库
  4. sudo dnf install libbpf-devel
  5. # 编译eBPF程序
  6. clang -O2 -target bpf -c xdp_prog.c -o xdp_prog.o
  7. # 加载eBPF程序
  8. ip link set dev eth0 xdp obj xdp_prog.o section xdp
  9. # 卸载eBPF程序
  10. ip link set dev eth0 xdp off
复制代码

使用DPDK优化网络性能

DPDK(Data Plane Development Kit)是一组用于快速数据包处理的库和驱动程序。
  1. # 安装DPDK开发包
  2. sudo dnf install dpdk-devel
  3. # 设置huge pages
  4. echo 1024 > /proc/sys/vm/nr_hugepages
  5. mkdir /mnt/hugepages
  6. mount -t hugetlbfs nodev /mnt/hugepages
  7. # 绑定网卡到DPDK
  8. modprobe vfio-pci
  9. usertools/dpdk-devbind.py --bind=vfio-pci eth0
  10. # 编译DPDK应用
  11. make -C examples/helloworld
  12. # 运行DPDK应用
  13. ./examples/helloworld/build/helloworld -l 0-1 -n 4
复制代码

使用SPDK优化存储性能

SPDK(Storage Performance Development Kit)是一组用于优化存储性能的库和应用程序。
  1. # 安装SPDK开发包
  2. sudo dnf install spdk-devel
  3. # 设置huge pages
  4. echo 1024 > /proc/sys/vm/nr_hugepages
  5. mkdir /mnt/hugepages
  6. mount -t hugetlbfs nodev /mnt/hugepages
  7. # 绑定NVMe设备到SPDK
  8. modprobe uio_pci_generic
  9. scripts/setup.sh
  10. # 运行SPDK应用
  11. ./examples/nvme/identify/identify
复制代码

使用KSM优化内存使用

KSM(Kernel Samepage Merging)是一种内核功能,可以合并相同的内存页面,减少内存使用。
  1. # 启用KSM
  2. echo 1 > /sys/kernel/mm/ksm/run
  3. # 调整KSM参数
  4. echo 1000 > /sys/kernel/mm/ksm/pages_to_scan
  5. echo 20 > /sys/kernel/mm/ksm/sleep_millisecs
  6. # 查看KSM统计信息
  7. cat /sys/kernel/mm/ksm/pages_shared
  8. cat /sys/kernel/mm/ksm/pages_sharing
  9. cat /sys/kernel/mm/ksm/pages_unshared
  10. cat /sys/kernel/mm/ksm/pages_volatile
复制代码

使用zRAM优化交换空间

zRAM是一种在RAM中创建压缩块设备的技术,可以用作高速交换空间。
  1. # 安装zRAM
  2. sudo dnf install zram-generator
  3. # 配置zRAM
  4. sudo nano /etc/systemd/zram-generator.conf
复制代码

zram-generator.conf示例:
  1. [zram0]
  2. zram-size = 4096  # MB
  3. compression-algorithm = lz4
复制代码
  1. # 启用zRAM
  2. sudo systemctl start systemd-zram-setup@zram0.service
  3. sudo systemctl enable systemd-zram-setup@zram0.service
  4. # 查看zRAM状态
  5. cat /proc/swaps
  6. cat /sys/block/zram0/mm_stat
复制代码

最佳实践和案例分析

Web服务器资源管理案例

假设我们有一个运行Nginx和PHP-FPM的Web服务器,需要优化其资源使用。
  1. # 安装Nginx和PHP-FPM
  2. sudo dnf install nginx php-fpm
  3. # 配置Nginx
  4. sudo nano /etc/nginx/nginx.conf
复制代码

nginx.conf示例:
  1. user nginx;
  2. worker_processes auto;
  3. worker_rlimit_nofile 65536;
  4. events {
  5.     worker_connections 8192;
  6.     use epoll;
  7.     multi_accept on;
  8. }
  9. http {
  10.     sendfile on;
  11.     tcp_nopush on;
  12.     tcp_nodelay on;
  13.     keepalive_timeout 30;
  14.     keepalive_requests 1000;
  15.     reset_timedout_connection on;
  16.     client_body_timeout 10;
  17.     send_timeout 2;
  18.    
  19.     # Gzip压缩
  20.     gzip on;
  21.     gzip_vary on;
  22.     gzip_proxied any;
  23.     gzip_comp_level 6;
  24.     gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
  25.    
  26.     # 缓存设置
  27.     open_file_cache max=200000 inactive=20s;
  28.     open_file_cache_valid 30s;
  29.     open_file_cache_min_uses 2;
  30.     open_file_cache_errors on;
  31.    
  32.     include /etc/nginx/conf.d/*.conf;
  33. }
复制代码
  1. # 配置PHP-FPM
  2. sudo nano /etc/php-fpm.d/www.conf
复制代码

www.conf示例:
  1. [www]
  2. user = nginx
  3. group = nginx
  4. listen = /run/php-fpm/www.sock
  5. listen.owner = nginx
  6. listen.group = nginx
  7. listen.mode = 0660
  8. pm = dynamic
  9. pm.max_children = 100
  10. pm.start_servers = 20
  11. pm.min_spare_servers = 10
  12. pm.max_spare_servers = 30
  13. pm.max_requests = 1000
  14. php_admin_value[memory_limit] = 128M
复制代码
  1. # 创建systemd服务文件以限制资源
  2. sudo nano /etc/systemd/system/nginx.service.d/override.conf
复制代码

override.conf示例:
  1. [Service]
  2. LimitNOFILE=65536
  3. MemoryLimit=1G
  4. CPUQuota=80%
复制代码
  1. sudo nano /etc/systemd/system/php-fpm.service.d/override.conf
复制代码

override.conf示例:
  1. [Service]
  2. LimitNOFILE=65536
  3. MemoryLimit=2G
  4. CPUQuota=80%
复制代码
  1. # 重新加载systemd配置
  2. sudo systemctl daemon-reload
  3. # 启动并启用服务
  4. sudo systemctl start nginx php-fpm
  5. sudo systemctl enable nginx php-fpm
  6. # 设置内核参数
  7. cat >> /etc/sysctl.conf << EOF
  8. # 网络参数优化
  9. net.core.somaxconn=65536
  10. net.core.netdev_max_backlog=10000
  11. net.ipv4.tcp_max_syn_backlog=65536
  12. net.ipv4.tcp_fin_timeout=10
  13. net.ipv4.tcp_keepalive_time=1200
  14. net.ipv4.tcp_max_tw_buckets=5000
  15. net.ipv4.ip_local_port_range="1024 65535"
  16. net.ipv4.tcp_rmem="4096 87380 16777216"
  17. net.ipv4.tcp_wmem="4096 65536 16777216"
  18. net.ipv4.tcp_congestion_control=bbr
  19. # 文件系统参数优化
  20. fs.file-max=1000000
  21. vm.swappiness=10
  22. vm.dirty_ratio=60
  23. vm.dirty_background_ratio=2
  24. EOF
  25. # 应用内核参数
  26. sysctl -p
  27. # 设置文件描述符限制
  28. echo "* soft nofile 65536" >> /etc/security/limits.conf
  29. echo "* hard nofile 65536" >> /etc/security/limits.conf
复制代码

数据库服务器资源管理案例

假设我们有一个运行MySQL的数据库服务器,需要优化其资源使用。
  1. # 安装MySQL
  2. sudo dnf install mysql-server
  3. # 配置MySQL
  4. sudo nano /etc/my.cnf
复制代码

my.cnf示例:
  1. [mysqld]
  2. # 基本设置
  3. user = mysql
  4. port = 3306
  5. socket = /var/lib/mysql/mysql.sock
  6. pid-file = /var/run/mysqld/mysqld.pid
  7. # InnoDB设置
  8. innodb_buffer_pool_size = 4G  # 设置为系统内存的50-70%
  9. innodb_buffer_pool_instances = 4
  10. innodb_log_file_size = 512M
  11. innodb_log_buffer_size = 64M
  12. innodb_flush_log_at_trx_commit = 2
  13. innodb_flush_method = O_DIRECT
  14. innodb_file_per_table = 1
  15. innodb_read_io_threads = 8
  16. innodb_write_io_threads = 8
  17. innodb_thread_concurrency = 0
  18. # MyISAM设置
  19. key_buffer_size = 256M
  20. myisam_sort_buffer_size = 64M
  21. myisam_max_sort_file_size = 10G
  22. myisam_repair_threads = 1
  23. # 连接设置
  24. max_connections = 500
  25. max_connect_errors = 100000
  26. back_log = 512
  27. max_allowed_packet = 64M
  28. thread_cache_size = 100
  29. thread_stack = 256K
  30. # 查询缓存设置(MySQL 8.0已移除查询缓存)
  31. # query_cache_type = 1
  32. # query_cache_size = 256M
  33. # query_cache_limit = 4M
  34. # 其他设置
  35. tmp_table_size = 256M
  36. max_heap_table_size = 256M
  37. sort_buffer_size = 2M
  38. read_buffer_size = 1M
  39. read_rnd_buffer_size = 2M
  40. join_buffer_size = 2M
  41. table_open_cache = 2000
  42. table_definition_cache = 2000
  43. open_files_limit = 65535
  44. # 日志设置
  45. slow_query_log = 1
  46. slow_query_log_file = /var/log/mysql/slow.log
  47. long_query_time = 2
  48. log_queries_not_using_indexes = 1
  49. # 复制设置(如果需要)
  50. # server-id = 1
  51. # log-bin = mysql-bin
  52. # binlog_format = ROW
  53. # expire_logs_days = 7
复制代码
  1. # 创建systemd服务文件以限制资源
  2. sudo nano /etc/systemd/system/mysqld.service.d/override.conf
复制代码

override.conf示例:
  1. [Service]
  2. LimitNOFILE=65536
  3. MemoryLimit=6G
  4. CPUQuota=90%
  5. TasksMax=1000
  6. # 使用tuned优化
  7. CPUSchedulingPolicy=rr
  8. CPUSchedulingPriority=50
  9. IOSchedulingClass=realtime
  10. IOSchedulingPriority=7
复制代码
  1. # 重新加载systemd配置
  2. sudo systemctl daemon-reload
  3. # 启动并启用MySQL
  4. sudo systemctl start mysqld
  5. sudo systemctl enable mysqld
  6. # 设置内核参数
  7. cat >> /etc/sysctl.conf << EOF
  8. # 网络参数优化
  9. net.core.somaxconn=65536
  10. net.core.netdev_max_backlog=10000
  11. net.ipv4.tcp_max_syn_backlog=65536
  12. net.ipv4.tcp_fin_timeout=10
  13. net.ipv4.tcp_keepalive_time=1200
  14. net.ipv4.tcp_max_tw_buckets=5000
  15. net.ipv4.ip_local_port_range="1024 65535"
  16. net.ipv4.tcp_rmem="4096 87380 16777216"
  17. net.ipv4.tcp_wmem="4096 65536 16777216"
  18. net.ipv4.tcp_congestion_control=bbr
  19. # 文件系统参数优化
  20. fs.file-max=1000000
  21. vm.swappiness=10
  22. vm.dirty_ratio=60
  23. vm.dirty_background_ratio=2
  24. # 虚拟内存参数优化
  25. vm.nr_hugepages=1024
  26. EOF
  27. # 应用内核参数
  28. sysctl -p
  29. # 设置文件描述符限制
  30. echo "* soft nofile 65536" >> /etc/security/limits.conf
  31. echo "* hard nofile 65536" >> /etc/security/limits.conf
  32. # 设置huge pages
  33. mkdir /mnt/hugepages
  34. mount -t hugetlbfs nodev /mnt/hugepages
  35. echo "nodev /mnt/hugepages hugetlbfs defaults 0 0" >> /etc/fstab
  36. # 使用tuned优化
  37. sudo tuned-adm profile throughput-performance
复制代码

容器化应用资源管理案例

假设我们有一个运行Docker/Podman容器的应用服务器,需要优化其资源使用。
  1. # 安装Podman
  2. sudo dnf install podman
  3. # 创建Pod
  4. podman pod create --name myapp -p 80:80 -p 443:443
  5. # 运行Web服务器容器
  6. podman run -d --name webserver --pod myapp \
  7.   --cpus=2 \
  8.   --memory=1g \
  9.   --memory-swap=2g \
  10.   --blkio-weight=500 \
  11.   --pids-limit=100 \
  12.   -v /var/www/html:/var/www/html:Z \
  13.   nginx:alpine
  14. # 运行应用服务器容器
  15. podman run -d --name appserver --pod myapp \
  16.   --cpus=4 \
  17.   --memory=2g \
  18.   --memory-swap=4g \
  19.   --blkio-weight=500 \
  20.   --pids-limit=200 \
  21.   -v /var/www/app:/var/www/app:Z \
  22.   myapp:latest
  23. # 运行数据库容器
  24. podman run -d --name database --pod myapp \
  25.   --cpus=2 \
  26.   --memory=4g \
  27.   --memory-swap=6g \
  28.   --blkio-weight=700 \
  29.   --pids-limit=100 \
  30.   -v /var/lib/mysql:/var/lib/mysql:Z \
  31.   mysql:8.0
  32. # 查看容器资源使用情况
  33. podman stats
  34. # 创建systemd服务文件以管理Pod
  35. sudo nano /etc/systemd/system/myapp-pod.service
复制代码

myapp-pod.service示例:
  1. [Unit]
  2. Description=My Application Pod
  3. After=network.target
  4. [Service]
  5. Restart=always
  6. ExecStart=/usr/bin/podman start -a myapp
  7. ExecStop=/usr/bin/podman stop -t 10 myapp
  8. KillMode=none
  9. Type=forking
  10. PIDFile=/run/user/1000/containers/overlay-containers/.../userdata/pidfile
  11. [Install]
  12. WantedBy=multi-user.target
复制代码
  1. # 重新加载systemd配置
  2. sudo systemctl daemon-reload
  3. # 启用并启动服务
  4. sudo systemctl enable myapp-pod
  5. sudo systemctl start myapp-pod
  6. # 设置内核参数
  7. cat >> /etc/sysctl.conf << EOF
  8. # 网络参数优化
  9. net.core.somaxconn=65536
  10. net.core.netdev_max_backlog=10000
  11. net.ipv4.tcp_max_syn_backlog=65536
  12. net.ipv4.tcp_fin_timeout=10
  13. net.ipv4.tcp_keepalive_time=1200
  14. net.ipv4.tcp_max_tw_buckets=5000
  15. net.ipv4.ip_local_port_range="1024 65535"
  16. net.ipv4.tcp_rmem="4096 87380 16777216"
  17. net.ipv4.tcp_wmem="4096 65536 16777216"
  18. net.ipv4.tcp_congestion_control=bbr
  19. # 文件系统参数优化
  20. fs.file-max=1000000
  21. vm.swappiness=10
  22. vm.dirty_ratio=60
  23. vm.dirty_background_ratio=2
  24. # 容器参数优化
  25. user.max_user_namespaces=28633
  26. EOF
  27. # 应用内核参数
  28. sysctl -p
  29. # 设置文件描述符限制
  30. echo "* soft nofile 65536" >> /etc/security/limits.conf
  31. echo "* hard nofile 65536" >> /etc/security/limits.conf
  32. # 使用tuned优化
  33. sudo tuned-adm profile virtual-guest
复制代码

总结

CentOS Stream资源管理是一个复杂而重要的主题,涉及系统监控、CPU管理、内存管理、磁盘I/O管理、网络资源管理、进程和服务管理、系统性能调优、资源限制与控制以及高级优化技巧等多个方面。通过本文的介绍,您应该已经掌握了CentOS Stream资源管理的基本概念和实用技巧。

有效的资源管理不仅可以提高系统性能和稳定性,还可以降低运营成本,提高资源利用率。在实际应用中,需要根据具体的应用场景和需求,选择合适的资源管理策略和工具。

最后,资源管理是一个持续的过程,需要不断地监控、分析和优化。希望本文能够帮助您更好地管理CentOS Stream系统资源,提升服务器性能与稳定性。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

频道订阅

频道订阅

加入社群

加入社群

联系我们|TG频道|RSS

Powered by Pixtech

© 2025 Pixtech Team.