解决共享内存占用很大问题

发布时间:2022-07-05 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了解决共享内存占用很大问题脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

传统的共享内存是System V形式的,可通过"/PRoc/sys/kernel/shmall"参数限制其占用的最大物理内存空间,像这样:

echo 1024 > /proc/sys/kernel/shmall

# 1个G
echo 1048576 > /proc/sys/kernel/shmall

[root@ecs-5611 ~]# cat /proc/sys/kernel/shmall
18446744073692774399

这里"shmall"的数值是以page为单位的,因为page的大小通常为4KiB,所以设置1024意味着其总大小不能超过1024*4KiB=4096KiB。

free -h

除了System V形式的共享内存,还有posix形式的共享内存,而"shmall"参数只对System V形式的共享内存有效,对POSIX形式的共享内存无效。要想限制POSIX形式的共享内存,得用其他的手段

System V共享内存由内核管理,对用户不可见,而POSIX共享内存可通过"DF -h"命令查看,在df命令的输出结果中,"Filesystem"为"@R_408_1262@"或者"devtmpfs"的就是POSIX共享内存,其中"/run", "/sys/fs/cgroups"是系统目录,而"/dev/shm"是可由用户使用的。

[root@ecs-5611 ~]# df -h
文件系统        容量  已用  可用 已用% 挂载点
devtmpfs        7.5G     0  7.5G    0% /dev
tmpfs           7.7G     0  7.7G    0% /dev/shm
tmpfs           7.7G   18M  7.7G    1% /run
tmpfs           7.7G     0  7.7G    0% /sys/fs/cgroup
/dev/vda2        98G   28G   66G   30% /
tmpfs           7.7G  4.2G  3.6G   54% /tmp
/dev/vda1      1022M  5.8M 1017M    1% /boot/efi
/dev/vdb1       492G   16G  451G    4% /data
tmpfs           1.6G     0  1.6G    0% /run/user/0
overlay          98G   28G   66G   30% /home/docker-data/overlay2/1e9ce9a42b4ae13671785f40a06a827adeaa7d3d1947f0ee92613661615628d7/merged
overlay          98G   28G   66G   30% /home/docker-data/overlay2/a8b0482bd16311CF594efac875148b9c691316bcb97ec1d0e0565cac644bf025/merged
shm              64M     0   64M    0% /home/docker-data/containers/56e63894cc7b2ec6243c4aadb3931040f429167d333af0e9fa9bcf2c0f68e57a/mounts/shm
shm              64M     0   64M    0% /home/docker-data/containers/42143b7514fac7e317395af8e505e96b2e6ae4cf7002e7113cfda7a250ed5a9c/mounts/shm
[root@ecs-5611 ~]# 

这些POSIX共享内存是以内存文件系统的形式挂载的,如果不设置,那么挂载的默认大小为内存的一(代码位于/mm/shmem.c)。

在我的机器上,内存大小是接近8个GiB,所以其默认大小是3.9GiB。如果要限制"/dev/shm"这个挂载点的共享文件系统的大小,则可以在"/etc/fstab"配置文件中添加如下的语句:

echo 'tmpfs /dev/shm tmpfs nodev,nosuid,size=128M 0 0' >> /etc/fstab

echo 'tmpfs /dev/shm tmpfs nodev,nosuid,size=1024M 0 0' >> /etc/fstab

# 重启生效
echo 'tmpfs /tmp tmpfs nodev,nosuid,size=1024M 0 0' >> /etc/fstab

这里"size"的设置就比较简单直观了,不像"shmall"那样还需要换算一下大小。重启之后再用"df -h /dev/shm"命令看一下,"Size"表示的大小已经变成了我们之前设定的值。

那如何解除这种限制呢?永久性的办法当然还是和前面一样,填写"/etc/fstab"配置文件,但那毕竟需要重启才能生效,如果想立刻生效以便快速进行接下来进一步的实验,只需"remount"一下就可以了,像这样:

# 立即生效
mount -o remount,size=7G /dev/shm

mount -o remount,size=3G /tmp

# 共享内存已经超过3G size=3G 会报错
[root@ecs-5611 ~]# mount -o remount,size=3G /tmp
mount: /tmp: 挂载点未挂载或选项有误.

mount -o remount,size=1G /tmp

转:https://zhuanlan.zhihu.COM/p/93142176

脚本宝典总结

以上是脚本宝典为你收集整理的解决共享内存占用很大问题全部内容,希望文章能够帮你解决解决共享内存占用很大问题所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。