核心目标是切断故障扩散路径、遏制级联雪崩和横向入侵;须为关键服务设CPU、内存、进程数等硬性资源配额,配套连接池管控、实时审计监控及网络/权限隔离措施。
配置系统服务资源审计与限制,核心目标不是单纯“防崩溃”,而是切断故障扩散路径、遏制单点失效引发的级联雪崩和横向入侵。关键不在堆参数,而在建立可观察、可干预、可隔离的运行边界。
默认情况下,Linux服务往往能无限制使用CPU、内存、进程数等资源,这是级联故障的温床。必须为每个关键服务(如Nginx、MySQL、Redis、自研Java服务)单独设置硬性上限:
/etc/systemd/system/mysqld.service)中添加[Service]段配置:MemoryLimit=2G(防止OOM杀错进程)CPUQuota=75%(避免CPU霸占)TasksMax=500(防fork炸弹或连接数失控)LimitNOFILE=65535(控制文件描述符,防耗尽)systemctl daemon-reload && systemctl restart 服务名生效;用systemctl show -p MemoryLimit,CPUSchedulingPolicy 服务名验证是否加载成功。docker run或Pod YAML中显式声明--memory、--cpus、--pids-limit等参数,不可依赖默认值。很多雪崩始于连接池满、线程池爆、队列积压。这不仅是性能问题,更是安全入口——攻击者可利用慢速攻击(Slowloris)、连接洪泛等手段故意触发这些瓶颈,进而探测或利用服务异常行为:
worker_connections、keepalive_timeout、limit_conn(按IP或key限流),关闭不必要的keepalive长连接。max_connections,启用wait_timeout和interactive_timeout(建议设为300秒),避免空闲连接长期占用资源。Integer.MAX_VALUE这类危险值。光有限制不够,必须配套实时感知能力,否则故障发生时你还在找日志:
sudo systemctl set-property 服务名 MemoryCurrent=(用于调试),生产环境启用SystemMaxUse=512M防日志撑爆磁盘。process_resident_memory_bytes{job="mysqld"}、process_open_fds{job="nginx"}、systemd_unit_state{unit="mysqld.service",state="activating"}。systemd_unit_status状态变为failed,立即触发通知并自动执行预设脚本(如重启服务、切换流量)。单服务出问题不该影响其他服务,更不该成为横向移动跳板:
unshare --user等高危能力,除非明确需要。www-data或daemon;数据库账号按服务划分,只授SELECT, INSERT等最小必要权限,禁用FILE、PROCESS等高危权限。