在128M小内存VPS上运行Debian 12,核心优化思路是减少进程数、降低内存占用、精简无用组件。以下是分步实操方案,优化后可稳定运行轻量服务(如Nginx、SSH等)。
一、基础环境清理(优先执行)
1. 卸载无用预装软件
Debian默认会安装一些冗余工具(如文档、桌面依赖、过时服务),直接卸载:
# 清理文档和语言包(占空间且耗内存)
apt-get purge -y man-db manpages locales locales-all
apt-get autoremove -y --purge
# 卸载非必需服务/工具(根据实际需求保留,如不需要打印服务、蓝牙等)
apt-get purge -y \
avahi-daemon cups* bluez* lvm2 mdadm \
rsyslog exim4* ppp* wireless-tools \
console-setup keyboard-configuration
# 清理APT缓存(释放磁盘空间,间接减少内存开销)
apt-get clean
rm -rf /var/cache/apt/* /var/lib/apt/lists/*
2. 禁用不必要的systemd服务
systemd默认启动大量后台服务,需禁用非必需项(谨慎操作,确保保留SSH等核心服务):
# 列出当前运行的服务,检查哪些可禁用
systemctl list-unit-files --type=service --state=enabled
# 禁用以下服务(根据实际情况调整)
systemctl disable --now \
systemd-timesyncd # 用更轻量的ntpd替代(或直接禁用)
apparmor # 安全限制,小内存可关闭
systemd-journald # 日志服务(可选,见下文替换方案)
udev # 硬件自动检测(VPS通常固定硬件,可禁用)
systemd-resolved # DNS解析(若用手动DNS可禁用)
注意: sshd (SSH服务)、 networking (网络)必须保留,否则会导致无法连接VPS。
二、内存优化(核心步骤)
1. 调整swap策略
小内存需合理利用swap(若VPS有swap分区/文件),减少内存溢出:
# 临时调整swappiness(0-100,值越低越倾向用内存,小内存建议设为60)
sysctl vm.swappiness=60
# 永久生效(编辑/etc/sysctl.conf)
echo "vm.swappiness=60" >> /etc/sysctl.conf
# 若没有swap,可创建128M临时swap文件(缓解内存压力)
dd if=/dev/zero of=/swapfile bs=1M count=128
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
# 永久挂载(添加到/etc/fstab)
echo "/swapfile none swap defaults 0 0" >> /etc/fstab
2. 禁用内核不必要功能
减少内核模块加载和内存开销:
# 禁用透明大页(THP,会增加内存碎片化)
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
# 永久生效(添加到/etc/rc.local,需先确保rc.local可执行)
echo 'echo "never" > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
chmod +x /etc/rc.local
# 禁用IPv6(若用不到,减少网络栈内存占用)
echo "net.ipv6.conf.all.disable_ipv6=1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6=1" >> /etc/sysctl.conf
sysctl -p # 生效
3. 优化临时文件存储
用内存临时文件系统(tmpfs)挂载 /tmp ,减少磁盘I/O并限制大小:
# 编辑/etc/fstab,添加tmpfs配置(限制为32M,避免占满内存)
echo "tmpfs /tmp tmpfs defaults,size=32M 0 0" >> /etc/fstab
mount -a # 生效
三、轻量工具替换(降低资源占用)
1. 用busybox替代coreutils(核心工具集)
busybox集成了ls、cp等常用命令,体积更小(约1M):
apt-get install -y busybox
# 创建软链接,替代系统默认命令(按需替换,避免冲突)
ln -sf /bin/busybox /bin/ls
ln -sf /bin/busybox /bin/cp
ln -sf /bin/busybox /bin/mv
ln -sf /bin/busybox /bin/rm
2. 替换日志服务(减少内存占用)
rsyslog 较臃肿,用 busybox-syslogd 替代:
# 先卸载rsyslog(若未卸载)
apt-get purge -y rsyslog
# 安装轻量日志服务
apt-get install -y busybox-syslogd
# 限制日志大小(编辑/etc/syslog.conf,添加轮转)
echo "*.* /var/log/messages;rotate,size=100k" > /etc/syslog.conf
systemctl restart busybox-syslogd
3. 替换SSH服务(可选)
openssh-server 内存占用约5-10M, dropbear 更轻量(约2M):
# 先卸载openssh(注意:卸载后需确保dropbear能启动,否则无法连接)
apt-get purge -y openssh-server
# 安装dropbear
apt-get install -y dropbear
# 配置端口(默认22,与openssh一致)
echo "DROPBEAR_PORT=22" >> /etc/default/dropbear
systemctl restart dropbear
四、系统参数微调
1. 限制systemd日志大小(若保留journald)
若未禁用 systemd-journald ,需限制日志占用:
# 编辑配置文件
echo "[Journal]" > /etc/systemd/journald.conf
echo "SystemMaxUse=16M" >> /etc/systemd/journald.conf # 最大占用16M
echo "MaxFileSec=1day" >> /etc/systemd/journald.conf # 日志保留1天
systemctl restart systemd-journald
2. 减少tty终端(默认6个,保留1个即可)
Linux默认启动6个虚拟终端(tty1-tty6),每个占用内存:
# 编辑/lib/systemd/system/getty@.service,注释掉自动启动
sed -i 's/^Alias=getty.target.wants\/getty@tty1.service/#&/' /lib/systemd/system/getty@.service
# 只保留tty1
systemctl disable getty@tty2.service getty@tty3.service getty@tty4.service getty@tty5.service getty@tty6.service
五、验证优化效果
执行以下命令检查内存占用,优化后空闲内存应提升50%以上:
# 查看内存使用(total/used/free)
free -m
# 查看进程内存占用(按内存排序)
ps aux --sort=-%mem | head -10
六、后续维护建议
1. 避免安装图形化工具:如 htop (用 busybox top 替代)、 vim (用 nano 或 busybox vi )。
2. 运行服务时限制资源:例如Nginx配置 worker_processes 1; ,PHP-FPM用 pm = ondemand 模式。
3. 定期清理:添加定时任务清理日志和临时文件:
echo "0 3 * * * rm -rf /tmp/* /var/log/*-* /var/log/*.gz" >> /etc/crontab
通过以上步骤,128M内存VPS可稳定运行轻量服务(如静态网站、代理等),内存占用可控制在60-80M左右(视运行服务而定)。操作时建议逐步执行,每步后验证系统可用性,避免一次性操作导致故障。
文章评论