linux服务器内存占用过大

top查看内存占用90%以上,而进程内存占用和不超过20%。cat /proc/meminfo 查看HugePages_Total值较大
原因是页空间占用过大(nr_hugepages)。本次解决方法是:

手动设置大页面的页数:sysctl vm.nr_hugepages = 20

设置前:
HugePages_Total:    6757
设置后:
HugePages_Total:    1242


每过几天看一下内存是否有增长来看看是否彻底解决。

修改完top查看内存为 20%多
第二天早上看内存为50%多
第二天下午看内存为70%多
设置
sysctl vm.nr_hugepages=0
内存变为10%多

修改postgreSQL使用huge_page
vi /var/lib/pgsql/9.5/data/postgresql.conf
添加huge_pages = off
systemctl restart postgresql-9.5.service

查看huge数量cat /proc/meminfo
HugePages_Total:     131
HugePages_Free:        0
HugePages_Rsvd:        0

系统日志
dmesg -T

日志进程
vim /etc/systemd/journald.conf
把Storage对应的值改为none,修改完保存退出
systemctl restart systemd-journald
systemctl mask systemd-journald
systemctl unmask systemd-journald


ps找出systemd-journal进程
kill掉,top查看内存占用从28%降到13%,但top按内存排序这个进程的内存占比绝对到不了10%多。


再次查看huge数量:
HugePages_Total:    1301
HugePages_Free:     1301
HugePages_Rsvd:        0
HugePages_Surp:        0

关闭transparent hugepage

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag


最后, 发现上面的措施都是无效的。HugePages_Total仍然无缘无故增大,最后的解决方法是重装系统,内存正常了,这个事结束。

定位到是linux系统内存(HugePages_Total)有问题,而不是我们的应用程序进程的内存。再经过测试环境的对比,该服务器历史上装过很多别的程序。确定了是系统问题而非我们代码问题,所以重做了系统来解决问题的。

文/中中 浏览次数:0次   2020-06-08 19:30:23

相关阅读


评论: