我有一些在CentOS 7系统上共享内存的大型内存进程。我正在为他们调整内存系统。对于kernel.shmmax和kernel.shmall,RedHat文档声明:
kernel.shmmax定义了一个共享内存段的最大字节数,该共享内存段可以在其虚拟地址空间中分配。kernel.shmall设置可在系统范围内使用的共享内存页的总量。
为什么共享内存有这样的限制?我可以使用限制或cgroup限制用户或进程使用的总内存。为什么我要限制系统上可用的共享内存总量?当系统有大量共享内存需要管理时,系统是否会受到性能影响?
发布于 2016-08-05 18:02:49
这是系统卫生的一部分,也是遗产的一部分。cgroup控件在Linux (2.6.24及更高版本)中相对较新,早在1.2.x系列的内核中就存在shmmax/shmall:
ipc/shm.c
{
struct shminfo shminfo;
if (!buf)
return -EFAULT;
shminfo.shmmni = SHMMNI;
shminfo.shmmax = SHMMAX;
shminfo.shmmin = SHMMIN;
shminfo.shmall = SHMALL;
shminfo.shmseg = SHMSEG;
err = verify_area (VERIFY_WRITE, buf, sizeof (struct shminfo));
if (err)
return err;
memcpy_tofs (buf, &shminfo, sizeof(struct shminfo));
return max_shmid;
}在过去的21年里,linux的极限理念已经发生了变化。当时,全球极限的设计模式占主导地位。您不想为IPC使用所有的RAM,所以您需要为它设置一个高水标记,以确保有足够的空间用于其他一切。这也可以用于现代cgroup;您的进程的单个限制,有一个全局限制,以确保避免交换,整个系统仍然运行良好。
https://serverfault.com/questions/794886
复制相似问题