linux内存共享 linux查看运行内存命令
大家好,今天小编来为大家解答以下的问题,关于linux内存共享,linux查看运行内存命令这个很多人还不知道,现在让我们一起来看看吧!
如何设置LINUX的共享内存
我们可以修改shmmax内核参数,使SGA存在于一个共享内存段中。
通过修改/proc/sys/kernel/shmmax参数可以达到此目的。
[root@neirong root]# echo 1073741824>/proc/sys/kernel/shmmax
[root@neirong root]# more/proc/sys/kernel/shmmax
1073741824这里设为1G。
对于shmmax文件的修改,系统重新启动后会复位。可以通过修改/etc/sysctl.conf使更改永久化。
在该文件内添加以下一行 kernel.shmmax= 1073741824这个更改在系统重新启动后生效.
1、设置 SHMMAX
SHMMAX
参数定义共享内存段的最大尺寸(以字节为单位)。在设置 SHMMAX时,切记 SGA的大小应该适合于一个共享内存段。 SHMMAX设置不足可能会导致以下问题:
ORA-27123:unable to attach to shared memory segment
您可以通过执行以下命令来确定 SHMMAX的值:
# cat/proc/sys/kernel/shmmax
33554432
SHMMAX的默认值是 32MB。我一般使用下列方法之一种将 SHMMAX参数设为 2GB:
通过直接更改/proc文件系统,你不需重新启动机器就可以改变 SHMMAX的默认设置。我使用的方法是将以下命令放入/etc/rc.local启动文件中:
#>echo"2147483648">/proc/sys/kernel/shmmax
您还可以使用 sysctl命令来更改 SHMMAX的值:
# sysctl-w kernel.shmmax=2147483648
最后,通过将该内核参数插入到/etc/sysctl.conf启动文件中,您可以使这种更改永久有效:
# echo"kernel.shmmax=2147483648">>/etc/sysctl.conf
2、设置 SHMMNI
我们现在来看 SHMMNI参数。这个内核参数用于设置系统范围内共享内存段的最大数量。该参数的默认值是 4096。这一数值已经足够,通常不需要更改。
您可以通过执行以下命令来确定 SHMMNI的值:
# cat/proc/sys/kernel/shmmni
4096
3、设置 SHMALL
最后,我们来看 SHMALL共享内存内核参数。该参数控制着系统一次可以使用的共享内存总量(以页为单位)。简言之,该参数的值始终应该至少为:
ceil(SHMMAX/PAGE_SIZE)
SHMALL的默认大小为 2097152,可以使用以下命令进行查询:
# cat/proc/sys/kernel/shmall
2097152
SHMALL的默认设置对于我们的 Oracle9 i RAC安装来说应该足够使用。
注意:在 i386平台上 Red Hat Linux的页面大小为 4096字节。但是,您可以使用 bigpages,它支持配置更大的内存页面尺寸。
linux查看共享内存命令
共享内存查看
使用ipcs命令,不加如何参数时,会把共享内存、信号量、消息队列的信息都打印出来,如果只想显示共享内存信息,使用如下命令:
[root@localhost~]# ipcs-m
------ Shared Memory Segments--------
key shmid owner perms bytes nattch status
0x00000000 1867776 root 600 393216 2 dest
0x00000000 1900545 root 600 393216 2 dest
0x00030021 1703938 zc 666 131104 1
0x0003802e 1736707 zc 666 131104 1
0x00030004 1769476 zc 666 131104 1
0x00038002 1802245 zc 666 131104 1
0x00000000 1933318 root 600 393216 2 dest
0x00000000 1966087 root 600 393216 2 dest
0x00000000 1998856 root 600 393216 2 dest
0x00000000 2031625 root 600 393216 2 dest
0x00000000 2064394 root 600 393216 2 dest
0x0014350c 2261003 cs 666 33554432 2
0x00000000 2129932 root 600 393216 2 dest
0x00000000 2162701 root 600 393216 2 dest
0x00143511 395837454 root 666 1048576 1
其中:
第一列就是共享内存的key;
第二列是共享内存的编号shmid;
第三列就是创建的用户owner;
第四列就是权限perms;
第五列为创建的大小bytes;
第六列为连接到共享内存的进程数nattach;
第七列是共享内存的状态status。其中显示“dest”表示共享内存段已经被删除,但是还有用户在使用它,当该段内存的mode字段设置为SHM_DEST时就会显示“dest”。当用户调用shmctl的IPC_RMID时,内存先查看多少个进程与这个内存关联着,如果关联数为0,就会销毁这段共享内存,否者设置这段内存的mod的mode位为SHM_DEST,如果所有进程都不用则删除这段共享内存。
Linux里面VIRT和RES代表什么意思
深入理解Linux世界中的内存管理:VIRT与RES的奥秘
Linux操作系统中的内存管理是其高效性能的关键,其中VIRT和RES是两个重要的内存指标,它们分别揭示了进程在虚拟和实际内存中的占用情况。VIRT,全称为Virtual Memory Size,代表的是进程占用的虚拟内存总量。这一数字包含了物理内存(即RAM)的使用、swap空间的占用,以及操作系统为进程分配但实际未使用的内存。虽然VIRT看似庞大,但往往并不直观反映实际内存需求,因为它的值可能会超过实际硬件内存总容量。
相比之下,RES,即Resident Set Size,是进程实际占用的物理内存,不包括swap空间,但包括与其他进程共享的内存。RES值的实用性明显优于VIRT,因为它能提供一个更准确的内存占用量。然而,即使如此,我们仍需注意,某些进程可能因为内存不足而被swap到硬盘,这部分内存也应该计入RES的计算中,尽管它并未真正存储在RAM中。
最后,SHR,即Shared Memory,代表的是进程可以与其他进程共享的内存空间。这是Linux内核Copy on Write(CoW)机制的体现,当一个进程fork出子进程时,两者可以共享相同的内存区域,直到子进程需要更改数据时才会进行实际的复制。这种机制有效地节省了内存资源,但理解SHR的含义对于理解进程间内存协作至关重要。
总结来说,VIRT、RES和SHR这三个内存指标在Linux中各有其重要性,VIRT提供了总览,RES聚焦实际使用,而SHR则揭示了进程间的内存共享。理解这些概念,有助于我们更好地监控和优化系统内存使用,确保资源的有效分配和性能的提升。