服务器内存只有1G,合理的分配方式是:系统本身预留200~300MB,应用服务控制在500~600MB以内,剩余空间靠Swap兜底,同时把MySQL、PHP-FPM、Redis这类吃内存的服务逐个设死上限。 1G不是不能跑,关键在于别让任何一个进程”敞开了吃”。
先搞清楚1G内存实际能用到多少
很多人一上来就规划分配比例,却没算过账,1G内存的云服务器,系统启动完成后真正交到你手里的,往往不到900MB。
用free -m看真实余量
登录服务器先执行:
free -m
重点看第二行available那一列,这才是新进程能安全使用的内存。used高不一定有问题,Linux会把空闲内存拿去做文件缓存,缓存是可回收的,别被吓到。
再看一眼谁在吃内存:
ps aux --sort=-%mem | head -10
排前面的那几个进程,就是你接下来要”动刀”的对象。
系统底噪要留多少
业内专家指出,一个干净的Linux系统(不带图形界面)基础占用通常在100~200MB,加上SSH、cron、日志服务、云厂商自带监控agent,实际会到200~300MB,所以给应用留的预算,按600MB左右算比较稳妥,剩下100MB左右作为突发缓冲,别再往下压了。
1核1G云服务器内存怎么分给常见服务
下面按最常见的几种玩法分别说,你对照自己的场景挑一个。
Nginx + PHP + MySQL跑网站
这是1G机器上最经典的组合,也是最容易OOM的,建议这样切:
- Nginx:约30~60MB,正常配置即可,别开太多worker,
worker_processes 1;就行 - PHP-FPM:控制在150MB以内,用
pm = ondemand按需拉起,pm.max_children = 5,pm.process_idle_timeout = 10s - MySQL:压到250MB以内,见下一节调优参数
- 系统 + 其他:200~300MB
- Redis(若需要):
maxmemory 64mb,淘汰策略allkeys-lru
合计大概700MB上下,留出余量给流量高峰。
1核1G云服务器能跑MySQL吗
能跑,但必须改配置,默认的my.cnf是按几百MB内存设计的,直接开起来很容易把机器拖死,在/etc/my.cnf里加上:
[mysqld]
innodb_buffer_pool_size = 128M
key_buffer_size = 16M
max_connections = 50
performance_schema = off
innodb_log_buffer_size = 8M
table_open_cache = 64
其中performance_schema = off这一项,在1G机器上往往能省下几十上百MB,收益非常直接。innodb_buffer_pool_size别贪大,128M对小型站点够用,设到256M就要从别处挪预算。
如果数据库只是存点小数据、访问量不高,可以考虑换成SQLite,内存占用能再降一个档次。
1G内存装Docker够用吗
够用,但只能装轻量服务,而且必须给每个容器设内存上限,否则一个容器失控就全军覆没,启动时加参数:
docker run -d --memory=256m --memory-swap=512m --name myapp myimage
同时把Docker守护进程本身的开销算进去,dockerd通常在50~100MB,1G机器上跑两三个小容器就差不多了,再多意义不大,另外建议关掉不用的功能,比如docker network别乱建,overlay网络会带来额外开销。
1G内存服务器swap设置多大合适
这是个高频问题,答案不复杂:Swap千万别不开,但也不能当内存用。
Swap大小怎么定
对1G物理内存的机器,行业共识认为设置1~2G的Swap比较合适,设置太小起不到兜底作用,设置太大又会在真正吃满时出现严重卡顿,实操命令:
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
最后一行写进fstab,重启才不会失效,验证用free -h看Swap那一行。
把swappiness调低
默认值60意味着系统很爱往Swap里塞东西,会明显拖慢响应,建议改成10:
sysctl vm.swappiness=10
echo 'vm.swappiness=10' >> /etc/sysctl.conf
这样平时优先用物理内存,只在真正吃紧时才动用Swap,相当于给服务器加了个安全气囊。
不同配置方案横向对比
同样是1G内存,不同分配思路的效果差别很大,下面这张表可以当参考:
| 分配方案 | 系统预留 | 应用预算 | Swap | 适用场景 | 稳定性 |
|---|---|---|---|---|---|
| 激进型 | 200MB | 750MB | 1G | 纯静态站、轻量API | 一般 |
| 均衡型 | 280MB | 600MB | 2G | 建站、博客、小程序后端 | 较好 |
| 保守型 | 300MB | 450MB | 2G | 带数据库的完整LAMP | 好 |
新手建议直接走均衡型,出问题的概率最低。
内存告急时的排查与长期对策
配置调好后还是可能出问题,得知道从哪查。
定位内存占用大户
按顺序执行这几条:
free -m看整体水位ps aux --sort=-%mem | head看进程排行dmesg | grep -i "killed process"查有没有被OOM Killer杀过进程cat /proc/meminfo细看各项
如果日志里出现过Out of memory: Killed process,说明确实撑爆过,必须回头再砍配置。
顺手能省出来的内存
有些开销是白给的,关掉立竿见影:
- 清理日志:
journalctl --vacuum-size=50M - 关掉不用的服务:
systemctl disable --now bluetooth之类 - 限制日志轮转,
logrotate里把保留份数调小 - 不用中文输入、图形界面的机器,相关包直接卸掉
什么时候该升级
如果做完上面这些,监控里内存长期在85%以上,Swap频繁读写,那说明业务确实长大了,这时候优化带来的边际收益已经很低,与其继续抠配置,不如直接升到2G,近年来入门级云服务器的差价并不大,稳定性换来的收益远超那点费用。
Q&A:服务器内存不足1g怎么分配的常见疑问
服务器内存不足1g怎么分配才不会OOM?
核心是三件事:给每个服务设硬上限、开1~2G的Swap兜底、把swappiness调到10,然后持续观察free -m里的available,长期低于100MB就要再砍配置。
便宜云服务器1G内存够用吗,值不值得买?
看你跑什么,纯静态站、个人博客、轻量API、小流量小程序后端,完全够用;带数据库的完整建站系统也能跑,但要经历一轮调优,如果是跑Java应用或者视频转码,1G明显不够,再便宜也别选。
1G内存服务器优化后还是卡,先查哪里?
先看dmesg里有没有OOM击杀记录,再看vmstat 1里的si和so两列,持续非零说明系统在频繁换页,这时候问题不在应用本身,而是物理内存确实不够了。
收尾
1G内存的分配逻辑其实就一句话:给每个进程划好边界,让Swap当保险丝,把系统底噪压到最低。 只要不放手让服务自由膨胀,这台小机器撑起一个中小型站点完全没问题。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/771606.html


