生产服务器的CPU利用率常年低于5%?这不是段子,是普遍现状。本文从四个核心子系统拆解Linux性能优化,帮你把闲置资源用起来。
一、CPU:别让它闲着
![]()
现代服务器都是多核SMP架构,但调度器有个隐患:同一线程可能在不同时刻跑在不同核心上。每个核心有独立的内存空间,切换时缓存失效,数据得重新加载。
![]()
解法是用CPU亲和性把进程绑死在一个核心:taskset -pc 0 73890把PID 73890钉在0号核心,最大化缓存命中率。
但taskset在NUMA架构下不够。NUMA(非统一内存访问)把CPU和内存分成节点,本地内存快,远程访问慢。数据库服务器尤其要注意——默认别用NUMA,非用不可的话用numactl --interleave=all启动,避免内存热点。
调度策略分两层:实时调度(优先级1-99,数字越大越急)和普通调度(100-139,数字越小越优先)。renice 5 调普通优先级,chrt -r -p 50 改实时优先级。
上下文切换是隐形杀手。每个核心能跑50到5万个进程,线程时间片到期或被抢占时切换,次数越多内核开销越重。健康指标参考:用户态60%-70%,系统态30%-35%,空闲0%-5%,每核心运行队列不超过4。用vmstat 1 5持续观察。
二、内存:缓存层级决定速度
![]()
CPU缓存三级结构,用lscpu可见:L1数据缓存32K、指令缓存32K,静态且每核心独立;L2缓存256K,动态共享;L3缓存8192K,跨核心动态共享。L1命中最快,往下逐级递减。
内存分配策略直接影响性能。NUMA环境下,numactl --cpunodebind=0 --membind=0 ./myapp把程序和内存都绑在0号节点,避免跨节点访问的延迟惩罚。
三、I/O与网络:待续
原文对I/O和网络子系统的详细拆解尚未展开,但核心逻辑一致:识别瓶颈、针对性绑定、减少跨边界访问。性能调优不是堆参数,是理解硬件架构后的精确匹配。
最后提醒:负载计算公式是"正在运行的线程数+运行队列中的线程数"。2核心、2个运行中、4个排队,负载就是6。别只看CPU百分比,队列深度更能暴露调度压力。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.