当前位置:首页 > 内存 > 正文

共享内存linux(linux共享内存实例)

  • 内存
  • 2024-06-08 09:49:30
  • 3739

一、linux查看共享内存命令共享内存视图
使用不带任何参数的ipcs命令,将会打印共享内存、信号量、消息队列的所有信息。如果只想显示共享内存信息,使用以下命令:
[root@localhost~]#ipcs-m
------共享内存段---------
KeyshmidownerperMsbytesnattchstatus
0039321600503932162DEST
0X000300211703938ZC66661311041
0x0003802e1736707ZC661311041
0x00041769466131041<2064c
0x0000000001966087ROOT6003932162DEST
0601D
0600000000000000000000000000D/>0x000000002031625ROOT6003932162DEST
0x0014350C22466233
0x000000002129932root6003932162most
0x000000002162701root6003932162
0x00143511395837454第一个列
第一列是共享内存的467454;
第二列是内存号scommonshmid;
否第三列是用户的所有者;
第四列是权限;
第五列是创建的大小(以字节为单位);
第六列是。连接到共享内存nattach的进程数量;第七列是共享内存的状态。“dest”屏幕显示共享内存段已被删除,但仍有用户在使用它。当用户调用shmctl的IPC_RMID时,内存首先检查有多少进程连接到这块内存,如果连接数为0,这块共享内存将被销毁,否则,这块内存的模式位被设置为SHM_DEST,如果全部如果没有进程使用它,该共享内存将被删除。
二、linux内核如何勾选共享内存所谓共享内存允许多个进程访问同一内存空间,这是IPC最容易获得的形式。它的设计运行效率低于其他通信设备。常常与其他通信机制(如信号量)结合起来,实现进程的同步和互斥。其他进程可以将共享内存的同一部分“加入”到它们自己的地址空间中。所有操作都可以访问共享内存中的地址。如果一个进程正在向此共享内存写入数据,则有权访问同一共享内存的其他进程将立即看到这些更改。共享内存的使用大大减少了大规模数据处理时的内存消耗。然而,共享内存的使用也存在很多陷阱。
1.
在Linux上,共享内存的总体大小是有限的。该大小由SHMMAX参数定义(以字节为单位)。/>
​#cat/proc/sys/kernel/shmmax
如果机器中创建的共享内存的大小超过此限制,则在程序中使用错误标志会出现以下错误message解决方案:
1.设置SHMMAX
SHMMAX默认值为32MB。通常您可以使用以下方法之一将SHMMAX参数设置为2GB:
通过直接更改/proc系统文件,您可以更改默认的SHMMAX设置,而无需检查机器。使用的方法是在/>etc/启动文件中放置如下命令:
echo"2147483648">/proc/sys/kernel/shmmax
您还可以使用sysctl命令更改SHMMAX值:=2147483648
最后,通过在/etc/启动文件中插入此内核参数,您可以使此更改始终有效:echo"=2147483648">>/etc/
 2.设置SHMMNI