在鲲鹏服务器上部署应用,明明配置不低,可跑起来就是没达到预期。别急着怀疑芯片,十有八九是系统里一个叫“透明大页”的功能在捣鬼。
这功能本意是好的,想让系统自动管理大内存页,提升性能。但在鲲鹏多核、高并发的环境下,它经常“好心办坏事”。它的自动合并和拆分内存页的操作,会在后台悄悄锁住内存,导致你的应用在关键时刻“卡一下”,性能曲线就像心电图,忽高忽低。
特别是跑数据库(MySQL、Redis)、JVM(Java应用)或者大数据组件,这个问题特明显。症状就是:应用时快时慢,监控里CPU利用率不高,但就是吞吐上不去,偶尔还能看到内核态CPU时间(sy)莫名增高。
解决办法就一个字:关。把它换成静态的、预分配的大页。
操作很简单,就几步:
- 在
/etc/default/grub文件里,找到启动参数那行(以GRUB_CMDLINE_LINUX开头),加上 transparent_hugepage=never。 - 运行
grub2-mkconfig更新配置,然后重启服务器。 - 重启后,用命令
cat /sys/kernel/mm/transparent_hugepage/enabled检查,看到输出里有 [never]就成功了。
关掉它之后,如果你确定应用需要大页性能(比如大型数据库),可以手动配置静态大页,稳定得多。我们一个卡了很久的Java服务,关了这功能,没改一行代码,吞吐量直接稳了30%,延迟波动也小多了。
记住这个顺序:性能不达标,先看OS配置,再查内核参数,最后才是深挖应用。这个“透明大页”,就是鲲鹏服务器上一个经典的、必须先踩死的“坑”。
在鲲鹏服务器上部署应用,明明配置不低,可跑起来就是没达到预期。别急着怀疑芯片,十有八九是系统里一个叫“透明大页”的功能在捣鬼。
这功能本意是好的,想让系统自动管理大内存页,提升性能。但在鲲鹏多核、高并发的环境下,它经常“好心办坏事”。它的自动合并和拆分内存页的操作,会在后台悄悄锁住内存,导致你的应用在关键时刻“卡一下”,性能曲线就像心电图,忽高忽低。
特别是跑数据库(MySQL、Redis)、JVM(Java应用)或者大数据组件,这个问题特明显。症状就是:应用时快时慢,监控里CPU利用率不高,但就是吞吐上不去,偶尔还能看到内核态CPU时间(sy)莫名增高。
解决办法就一个字:关。把它换成静态的、预分配的大页。
操作很简单,就几步:
/etc/default/grub文件里,找到启动参数那行(以GRUB_CMDLINE_LINUX开头),加上transparent_hugepage=never。grub2-mkconfig更新配置,然后重启服务器。cat /sys/kernel/mm/transparent_hugepage/enabled检查,看到输出里有[never]就成功了。关掉它之后,如果你确定应用需要大页性能(比如大型数据库),可以手动配置静态大页,稳定得多。我们一个卡了很久的Java服务,关了这功能,没改一行代码,吞吐量直接稳了30%,延迟波动也小多了。
记住这个顺序:性能不达标,先看OS配置,再查内核参数,最后才是深挖应用。这个“透明大页”,就是鲲鹏服务器上一个经典的、必须先踩死的“坑”。