因为要修改共享内存上限大小,在Fedora 8中shmmax是存放在/proc/sys/kernel/shmmax中的,选择修改shmmax的值有两种方式。
第一种是临时性的修改,操作十分简单在bash shell下敲下下面的命令:
# echo "0x40000000" > /proc/sys/kernel/shmmax
0x40000000是表示你要修改的共享内存最大值的大小,这里是表示1G。
那样你再vi查看一下shmmax的值就可以发现已经被修改了,然而你会发现在重启之后,这个值又会被修改过来,变为原来的默认值32M。
第二种是永久性的修改,修改 /etc/sysctl.conf 使更改永久化。在该文件内添加以下一行,这个更改在系统重新启动后生效kernel.shmmax = 0x40000000 。
附带解析几个操作:
ipcs是用来查看共享内存的信息的。
ipcrm是用来消除系统中共享内存段,具体操作man一下。
本人利用system v的操作增加共享内存,然后shmdt调共享内存,当所有运行的进程都dt了这段共享内存之后,发现这段共享内存还是存在的,最神的是,当我再启动一个进程读取数据,之前写的数据全部都在。也就是说物理内存内部并没有在所有引用的进程完毕之后将共享内存消去,通过ipcs可以查看到该共享内存段的信息。故如果一定要将其消去需要利用ipcrm -m的操作。
另外一个测试,当分配1G的共享内存,但是在实际物理内存中还是没有分配,而是在你第一次用到的时候才实际分配。