去年买机器的时候想得很简单:2 核 4G,跑个 WordPress 绰绰有余。

结果一年下来,机器上堆了 12 个服务。今天拉了一下实际占用,说实话有点意外。.

现在跑了什么

服务 内存 干什么
MySQL 5.7 900M 主数据库
PHP-FPM(8 进程) 550M 跑 WordPress
Nginx 185M 反代 + 静态
Redis 120M 对象缓存
Docker 守护进程 90M 跑下面几个容器
n8n 170M 自动化
Uptime Kuma 80M 监控
Alist 90M 网盘聚合
IT-Tools 70M 工具箱
宝塔面板 130M 面板本身
系统 + SSH 90M —
文件缓存 260M 内核页缓存

加起来 3.2G,只剩 500M 余量。

三个让我意外的点

① MySQL 吃了我四分之一的内存

默认配置下,MySQL 的 innodb_buffer_pool_size 是 128M,但我调到了 512M。

当时想的是「缓存大点查询快」,现在看有点贪了。

ini
[mysqld]
innodb_buffer_pool_size = 512M
innodb_log_file_size = 128M
max_connections = 100

2C4G 的机器,buffer_pool 设 512M 是上限,再多就危险了。

② PHP-FPM 的进程数要算清楚

默认 pm.max_children = 5,每个进程约 60M。

我调到了 8,算下来 480M,加上 master 进程,550M 差不多。

公式:进程数 × 单个进程内存 = PHP 总占用。

4G 的机器,PHP 最多给 600M,也就是 10 个进程。再多就挤占 MySQL 了。

③ 文件缓存不是「浪费」

看到 260M 的文件缓存,很多人第一反应是「内存被占了」。

其实这部分是可回收的。 系统有压力时会自动释放,不用管。

真正要盯的是 available,不是 free。

bash
free -h
# 看 available 那一列,不是 free

什么时候该换机器

三个信号:

信号 怎么看 说明
swap 用起来了 free -h 看 swap 不为 0 物理内存真的不够
负载长期大于核数 uptime 显示 4.0 以上 2 核机器持续 4.0 就是瓶颈
磁盘超过 85% df -h 清理后一周又满

我现在第二项已经踩线了,高峰期 uptime 到 3.5 左右。

三条经验

① 别做加法,做减法

每装一个服务,先问「不用会死吗」。

我装 n8n 是因为「以后可能用得上」,结果半年只跑了两个工作流。这 170M 完全可以省。

② 容器比进程好管

Docker 的服务,docker stats 一眼看到谁在吃内存,docker stop 一下就停。

裸装的服务(比如 MySQL)要查半天才能定位。

③ 留 20% 余量

4G 的机器,实际用到 3.2G 就是极限。再往上加,OOM Killer 会随机杀进程。

被杀的可能就是 MySQL。

我的下一台机器

如果重新买,我会选 4C8G:

  • 预算多 100 块/月
  • 但能多跑一个 Java 服务
  • 而且不用天天盯着内存

省下来的焦虑,值这 100 块。

 

俗人源码网免责声明:

1、本站所有资源均收集于互联网,分享目的仅限学习与参考。如有侵权,请联系 1685698671@qq.com 及时删除!

2、本站资源不保证完整性和安全性,下载后请自行检测。使用过程中出现的任何问题均与本站无关,敬请自行处理。

3、本站资源仅限个人学习研究使用,严禁用于任何违法违纪用途。因使用者违规使用产生的一切后果,由使用者自行承担,本站不承担任何责任。