CentOS Stream 8系统优化实战案例
导读:实战目标与适用场景 面向CentOS Stream 8的生产与边缘场景,覆盖网络高并发、MQTT 物联网接入、虚拟化/容器与Web/PHP四类常见负载,提供可落地的配置与验证步骤。 优化遵循“先基线、后调优、再压测”的闭环,优先保证稳定性...
实战目标与适用场景
- 面向CentOS Stream 8的生产与边缘场景,覆盖网络高并发、MQTT 物联网接入、虚拟化/容器与Web/PHP四类常见负载,提供可落地的配置与验证步骤。
- 优化遵循“先基线、后调优、再压测”的闭环,优先保证稳定性与安全性,再追求吞吐与时延的改善。
基线准备与系统加固
- 基础更新与仓库
- 执行:
sudo dnf update -y & & sudo dnf install epel-release -y - 说明:引入EPEL扩展包,为后续监控、安全与性能工具提供依赖。
- 执行:
- 安全加固与运维账户
- 创建运维账号并加入wheel:
sudo useradd -m -s /bin/bash ops & & sudo usermod -aG wheel ops - SSH 加固:
sudo sed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config与sudo sed -i 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config,随后sudo systemctl restart sshd - 防火墙启用与端口放行:
sudo systemctl enable --now firewalld,按需放行业务端口(见下一节 MQTT 示例)。
- 创建运维账号并加入wheel:
- 时间同步
- 建议启用chrony或NTP保持时钟一致:
sudo dnf install chrony -y & & sudo systemctl enable --now chronyd(或安装 ntp/ntpd 并启用)。
- 建议启用chrony或NTP保持时钟一致:
- 说明
- 不建议为性能直接关闭SELinux;应通过策略与最小权限原则解决权限问题。
内核与网络优化
- 文件句柄与内核参数
- 建议基线:
fs.file-max = 2097152、fs.nr_open = 2097152 - 网络与连接:
net.core.somaxconn = 65535、net.core.netdev_max_backlog = 65536、net.ipv4.tcp_max_syn_backlog = 65536 - 长连接保活(MQTT/长 TCP):
net.ipv4.tcp_keepalive_time = 600、net.ipv4.tcp_keepalive_probes = 3、net.ipv4.tcp_keepalive_intvl = 15 - 应用生效:
echo 'fs.file-max=2097152' | sudo tee -a /etc/sysctl.conf & & echo 'net.core.somaxconn=65535' | sudo tee -a /etc/sysctl.conf & & sudo sysctl -p
- 建议基线:
- 可选优化(按负载与设备选择)
- 减少页缓存回写抖动:
vm.dirty_ratio = 50、vm.dirty_background_ratio = 10 - I/O 调度器:SSD/NVMe 优先 none/mq-deadline;查看与临时设置示例:
cat /sys/block/sda/queue/scheduler与echo deadline | sudo tee /sys/block/sda/queue/scheduler
- 减少页缓存回写抖动:
- 重要提示
- 在NAT/负载均衡或跨机房环境,避免使用已被主流内核弃用的
net.ipv4.tcp_tw_recycle;如需缓解TIME_WAIT,优先使用tcp_tw_reuse与合理的连接复用/超时策略。
- 在NAT/负载均衡或跨机房环境,避免使用已被主流内核弃用的
存储与文件系统优化
- 挂载选项
- 通用优化:在
/etc/fstab中为数据盘增加noatime,nodiratime,减少元数据写入;示例:/dev/sdb1 /data ext4 defaults,noatime,nodiratime 0 0 - 应用特性:数据库/时序库等随机写密集场景优先使用 XFS;虚拟化镜像与快照场景可考虑 LVM thin 或 btrfs(需充分测试)。
- 通用优化:在
- 虚拟化与 Ceph RBD 场景
- 镜像与驱动:优先使用 virtio-blk 或 virtio-scsi;RBD 场景建议
cache=none并配合 OSD/客户端调优,降低额外缓存层带来的不一致与抖动。 - 基准方法:在 VM 内使用
fio进行 4K/16K 随机读写与不同 iodepth 的压测,验证调度器、队列深度与缓存策略的组合效果。
- 镜像与驱动:优先使用 virtio-blk 或 virtio-scsi;RBD 场景建议
实战案例一 物联网 MQTT 高并发接入
- 目标:单节点支撑10万级 MQTT 并发,启用 TLS,并基于用户/主题的ACL 控制。
- 软件与仓库
sudo dnf install epel-release -y & & sudo dnf install emqx-enterprise -y
- 防火墙放行
sudo firewall-cmd --permanent --add-port=1883/tcp & & sudo firewall-cmd --permanent --add-port=8883/tcp & & sudo firewall-cmd --reload
- TLS 证书
- 使用 certbot 获取证书:
sudo certbot certonly --standalone -d mqtt.example.com - 将证书拷贝至 EMQX:
/etc/emqx/certs/,配置listeners.ssl.default的keyfile与certfile。
- 使用 certbot 获取证书:
- EMQX 关键配置
- 最大连接:
listeners.ssl.default { bind = "0.0.0.0:8883"; max_connections = 100000; ssl_options { keyfile = "/etc/emqx/certs/privkey.pem"; certfile = "/etc/emqx/certs/fullchain.pem"; } } - 设备认证:
emqx_ctl users add device_001 $6$rounds=10000$somesalt$hashed_password - ACL 示例:
{ allow, { user, "device_001"} , publish, ["sensors/001/#"]}、{ allow, { user, "backend"} , subscribe, ["sensors/#"]}、{ deny, all}
- 最大连接:
- 内核与系统配合
- 采用上文“文件句柄与网络参数”的高并发基线;必要时结合 CPU 亲和/中断绑定与 EMQX 节点/监听器调优进行二次压测。
实战案例二 Web 与 PHP 应用加速
- 目标:在 Nginx + PHP-FPM 架构下,通过 OPcache 与 JIT 提升响应与吞吐。
- OPcache 启用
- 编辑
/etc/php.d/10-opcache.ini:opcache.enable=1、opcache.memory_consumption=128、opcache.max_accelerated_files=10000、opcache.validate_timestamps=0(生产建议关闭时间戳验证,配合部署流程刷新)。
- 编辑
- PHP-FPM 进程管理
/etc/php-fpm.d/www.conf:pm = ondemand(或 dynamic),pm.max_children = 50、pm.start_servers = 4、pm.min_spare_servers = 2、pm.max_spare_servers = 6- 重载:
sudo systemctl reload php-fpm
- PHP 8.x 与 JIT
- 升级至 PHP 8.0+ 后启用 JIT:
opcache.jit_buffer_size=256M、opcache.jit=1235 - 验证:
php -r "echo json_encode(opcache_get_status()); " | grep jitted_functions_count
- 升级至 PHP 8.0+ 后启用 JIT:
- 数据库与连接
- 建议使用持久连接与连接池,并对高频 SQL 建立索引;避免 ORM 层 N+1 查询与循环内查询。
验证与回滚
- 基线采集
- 网络/连接:
ss -s、netstat -n | awk '/^tcp/ { ++S[$NF]} END { for(a in S) print a, S[a]} '、sar -n TCP,ETCP 1 60 - 文件句柄:
cat /proc/sys/fs/file-nr - 磁盘:
iostat -x 1 60、vmstat 1 60 - 应用:MQTT 用
emqx_ctl listeners、emqx_ctl status;PHP 用ab/wrk与业务关键路径 P95/P99。
- 网络/连接:
- 压测方法
- MQTT:使用 emqtt-bench 或 JMeter 逐步从 1k 并发提升到目标并发,观察连接成功率、消息时延、CPU/内存/网络瓶颈。
- Web/PHP:使用 wrk/ab 进行 30–60 秒压测,对比 QPS、P95/P99、错误率 与 OPcache/JIT 命中率。
- 回滚策略
- 所有变更采用“小步提交 + 可回滚”:参数变更记录在案;关键文件(如
/etc/sysctl.conf、/etc/fstab、sshd_config)修改前先备份;异常时按备份快速恢复并降级参数。
- 所有变更采用“小步提交 + 可回滚”:参数变更记录在案;关键文件(如
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS Stream 8系统优化实战案例
本文地址: https://pptw.com/jishu/787977.html
