最近手头有点紧,但作为一枚前端,总得找点省钱又能搞事的方法。这周末闲着也是闲着,就开始琢磨手里的那台老当益壮的服务器。毕竟,对于我们这种经常需要跑 AI 推理、还要榨干每一分性能的人来说,工作日能稳定输出 Token 比什么都重要。

今天的主题很明确:不花一分钱,纯靠“手动挡”调优,看看能不能让这台服务器在周一到周五的高负载时刻表现得稍微从容一点。

为什么要搞这种“无用功”?

很多人觉得,服务器性能是硬指标,靠硬件堆砌就行了。但实际上,对于跑大语言模型(LLM)推理的场景来说,系统层面的瓶颈往往比显存更容易被忽视。I/O 等待、上下文切换、内存碎片的堆积,都会导致推理请求处理不过来,最终的表现就是 Token 生成速度忽快忽慢,甚至超时断连。

我的目标很简单:通过周末的极限施压测试,找出系统在临界点的表现,然后针对性地优化,确保工作日业务高峰期,服务不会掉链子。

调优第一步:清理战场

在开始任何测试之前,首先要做的就是“断舍离”。

  1. 查杀僵尸进程:用了 ps -eftop 排查了一圈,发现居然有几个以前跑脚本留下的僵尸进程还在占用内存。果断 kill -9 送走。
  2. 关闭不必要的服务:既然这台机子现在的核心任务是跑 AI,那些平时用不到的 Web 服务、定时同步任务统统关掉。这不仅释放了内存,更重要的是减少了 CPU 的中断打扰。
  3. 磁盘清理:日志文件如果不定期清理,很容易把磁盘 I/O 拖死。清理了 /var/log 下的一堆旧日志,顺便调整了 sysctl.conf 里的 vm.dirty_ratiovm.dirty_background_ratio,让系统更积极地刷盘,避免在推理关键时刻突然来一次高 I/O 写入。

调优第二步:内核参数微调

这是重头戏。Linux 的默认内核参数是为了通用场景设计的,对于我们的特定高并发读写场景,往往显得过于保守。

我主要调整了以下几个参数:

  • TCP 连接优化:修改 net.ipv4.tcp_fin_timeoutnet.core.somaxconn,加快 TCP 连接的回收,提高并发连接队列长度。这能有效防止突发流量时的连接丢包。
  • 文件描述符限制:将 fs.file-max 调高,并在 /etc/security/limits.conf 中增加了用户的 nofile 配置。跑高并发 AI 请求,文件句柄不够是硬伤。
  • Swap 策略:这是关键。虽然服务器内存还算充裕,但为了防止 OOM(Out of Memory)直接杀掉推理进程,不能完全关 Swap。但我把 vm.swappiness 从默认的 60 调低到了 10。这意味着系统会尽可能地使用内存,只有在内存极度紧张时才会少量使用 Swap,避免了频繁的内存交换带来的性能断崖。

调优第三步:压测实战

光说不练假把式。调完参数,必须上压力。

我用写好的脚本模拟了高并发请求,持续压测了两个小时。观察 htopiotop 的数据:

  • CPU 利用率:变得更加平滑,之前的波峰波谷现在变成了持续稳定的满载,说明 CPU 调度效率提升了。
  • 内存表现:几乎没用上 Swap,内存回收机制运作良好,没有出现内存泄漏的迹象。
  • I/O Wait:这是最惊喜的地方。之前的 I/O Wait 经常会跳到 5%-10%,压测期间一直稳定在 1% 以下。这意味着磁盘不再是瓶颈。

效果如何?

经过这一通操作,虽然服务器硬件没变,但在模拟业务场景的压测中,Token 的生成时延降低了约 15%,更重要的是,稳定性直线上升。以前偶尔会出现的卡顿、超时,现在基本绝迹。

对于我这种“落魄前端”来说,这就是周末最大的收获。不用花钱升级硬件,靠动动手指头修改配置,就能榨出更多的性能,这种感觉属实上头。

总结

服务器调优其实没什么秘诀,就是细心和耐性。每一个参数的修改背后,都要对应一个具体的瓶颈点。建议大家没事也可以看看自己的监控数据,别等到服务崩了才想起来去查日志。

如果你也在为服务器的性能发愁,或者想在工作日稳稳地“撸”更多的 Token,不妨试试这套思路。毕竟,免费的午餐才是最香的。

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭