去年买机器的时候想得很简单: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。
当时想的是「缓存大点查询快」,现在看有点贪了。
[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。
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、本站资源仅限个人学习研究使用,严禁用于任何违法违纪用途。因使用者违规使用产生的一切后果,由使用者自行承担,本站不承担任何责任。




评论(0)