linux服务器内存占用过大
原因是页空间占用过大(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)有问题,而不是我们的应用程序进程的内存。再经过测试环境的对比,该服务器历史上装过很多别的程序。确定了是系统问题而非我们代码问题,所以重做了系统来解决问题的。