最近购买了一台阿里云2核2G的ECS服务器,安装Anolis OS系统做测试使用。本来计划2G内存刚刚够用,但是实际登录到服务器查看,才发现服务器实际的内存容量只有1.6G左右。这个问题让很多用户感到困惑,本文将详细介绍如何解决这个问题。
问题分析
初步观察
通过htop命令查询实际内存发现只有1.72G左右。尝试更换Centos7.9系统镜像后,问题依然存在。询问阿里云AI助理后得知,2G内存的服务器实际可用容量1.6G是正常现象。
与腾讯云对比
根据使用腾讯云服务器的经验,2G内存服务器实际内存可用容量是1.95G左右。通过对比两台服务器的配置差异,可以发现内存分配策略的不同。
详细排查过程
一、分析内存情况
1. 检查内存占用情况
使用以下命令查看服务器系统内存状态:
free -h
htop
dmidecode -t memory
通过对比硬件内存分配数据与系统实际可用内存,发现硬件层阿里云和腾讯云都分配了2G内存,但到系统层阿里云就只剩下1.7G了。
2. 了解原因
根据阿里云AI助理的回复,在阿里云ECS服务器上,Linux系统通过crashkernel参数预留了一部分内存(例如192MB或256MB),用于内核崩溃时生成转储文件(Kdump功能)。
3. 检查kdump占用
systemctl status kdump
kdumpctl showmem
通过对比发现阿里云的kdump预留内存为161MB。
解决方案
二、释放内存占用
1. 关闭kdump服务
systemctl stop kdump
systemctl disable kdump
2. 修改GRUB配置
需要将/etc/default/grub文件中的crashkernel参数移除。
3. 更新GRUB配置并重启
grub2-mkconfig -o /boot/grub2/grub.cfg
4. 重启服务器
reboot
三、验证释放状态
1. 检查kdump内存预留状态
2. 检查内核预留内存
cat /sys/kernel/kexec_crash_size
可以看到内核实际预留内存大小已经为0了。
3. 查看内存状态
free -m
cat /proc/meminfo | grep MemTotal
结果对比
经过调整后,内存总量得到了显著提升,虽然与腾讯云相比仍有约100MB的差距,但这主要是由于两家云服务商内存分配策略不同所致。
扩展说明
重要提醒: 关闭kdump后,系统崩溃时将无法生成内存转储文件,因此生产环境不建议关闭此功能。
总结
通过以上步骤,我们可以成功释放被kdump功能占用的内存空间,让阿里云ECS服务器的实际可用内存更接近标称容量。不过在生产环境中,建议权衡系统调试需求和内存使用效率,谨慎操作。
本文基于实际测试经验整理,希望对遇到类似问题的用户有所帮助。



