linux ipcs命令详解

Posted chendian0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux ipcs命令详解相关的知识,希望对你有一定的参考价值。



本文链接:http://www.cnblogs.com/MartinChentf/p/6057100.html (转载请注明出处) ipcs 1. 命令格式   ipcs [resource-option] [output-format]   ipcs [resource-option] -i id 2. 命令功能   提供IPC设备的信息 3. 使用方法  resource选项:   ipcs -m  查看系统共享内存信息   ipcs -q  查看系统消息队列信息   ipcs -s  查看系统信号量信息   ipcs [-a] 系统默认输出信息,显示系统内所有的IPC信息 复制代码 [[email protected] data]$ ipcs -a ------ Message Queues -------- key msqid owner perms used-bytes messages ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x00000000 229376 martin 600 4194304 2 dest 0x00000000 196609 martin 600 524288 2 dest 0x00000000 327682 martin 600 393216 2 dest 0x00000000 491525 martin 600 2097152 2 dest ------ Semaphore Arrays -------- key semid owner perms nsems 复制代码  输出格式控制:   ipcs -c  查看IPC的创建者和所有者   ipcs -l  查看IPC资源的限制信息   ipcs -p  查看IPC资源的创建者和使用的进程ID   ipcs -t  查看最新调用IPC资源的详细时间   ipcs -u  查看IPC资源状态汇总信息 复制代码 [[email protected] data]$ ipcs -u --human ------ Messages Status -------- allocated queues = 0 used headers = 0 used space = 0B ------ Shared Memory Status -------- segments allocated 4 pages allocated 1760 pages resident 339 pages swapped 0 Swap performance: 0 attempts 0 successes ------ Semaphore Status -------- used arrays = 0 allocated semaphores = 0 复制代码  额外格式控制:   ipcs -l --human     以人类可以阅读的方式显示size 复制代码 [[email protected] data]$ ipcs -l --human ------ Messages Limits -------- max queues system wide = 3644 max size of message = 8K default max size of queue = 16K ------ Shared Memory Limits -------- max number of segments = 4096 max seg size = 16E max total shared memory = 16E min seg size = 1B ------ Semaphore Limits -------- max number of arrays = 128 max semaphores per array = 250 max semaphores system wide = 32000 max ops per semop call = 32 semaphore max value = 3276 复制代码 ipcrm 1. 命令功能   通过指定ID删除删除IPC资源,同时将与IPC对象关联的数据一并删除,只有超级用户或IPC资源创建者能够删除 2. 使用方法   ipcrm -M shmkey     移除用shmkey创建的共享内存段   ipcrm -m shmid     移除用shmid标识的共享内存段   ipcrm -S semkey     移除用semkey创建的信号量   ipcrm -s semid     移除用semid标识的信号量   ipcrm -Q msgkey     移除用msgkey创建的消息队列   ipcrm -q msgid     移除用msgid标识的消息队列


===========================================================================================

MOS 中的解释 ORA-00600 [SKGMHASH] Starting up an ASM/RDBMS Instance (Doc ID 756713.1)

SOLUTION

- In case the cause is a conflicting with existing memory segment, You should remove that segment,
for example: 


Starting ORACLE instance (normal)
Errors in file /u01/app/oracle/diag/asm/+asm/+ASM2/trace/+ASM2_ora_13099.trc (incident=1):
ORA-00600: internal error code, arguments: [SKGMHASH], [1], [1839154636], [0], [0], [], [], [], [], [], [], []
Incident details in: /u01/app/oracle/diag/asm/+asm/+ASM2/incident/incdir_1/+ASM2_ora_13099_i1.trc
Sweep [inc][1]: completed


Looking in ipcs -m we see:

# ipcs -m

------ Shared Memory Segments --------
key shmid owner perms bytes nattch status 
0x74027e1b 98304 root 600 4 0 
0x6d9f45cc 1212417 oracle 660 4096 0 

# echo "obase=16;1839154636" | bc -q
6D9F45CC

Note this is the 3rd argument from the ora-600 and it matches the key of the existing shared segment. To resolve the situation, issue:

ipcrm -M 0x6d9f45cc
 

 

ipc进程间通信概述

进程间通信有如下的目的:1、数据传输,一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M之间;2、共享数据,多个进程想要操作共享数据,一个进程对数据的修改,其他进程应该立刻看到;3、通知事件,一个进程需要向另一个或一组进程发送消息,通知它们发生了某件事情;4、资源共享,多个进程之间共享同样的资源。为了做到这一点,需要内核提供锁和同步机制;5、进程控制,有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

Linux进程间通信由以下几部分发展而来:

早期UNIX进程间通信:包括管道、FIFO、信号。

基于System V的进程间通信:包括System V消息队列、System V信号灯(Semaphore)、System V共享内存。

基于Socket进程间通信。

基于POSIX进程间通信:包括POSIX消息队列、POSIX信号灯、POSIX共享内存。

Linux中,与IPC相关的命令包括:ipcs、ipcrm(释放IPC)、

IPCS命令是Linux下显示进程间通信设施状态的工具。我们知道,系统进行进程间通信(IPC)的时候,可用的方式包括信号量、共享内存、消息队列、管道、信号(signal)、套接字等形式[2]。使用IPCS可以查看共享内存、信号量、消息队列的状态。

例如在CentOS6.0上执行ipcs

技术图片

其中:

第一列就是共享内存的key;

第二列是共享内存的编号shmid;

第三列就是创建的用户owner;

第四列就是权限perms;

第五列为创建的大小bytes;

第六列为连接到共享内存的进程数nattach;

第七列是共享内存的状态status。其中显示“dest”表示共享内存段已经被删除,但是还有用户在使用它,当该段内存的mode字段设置为 SHM_DEST时就会显示“dest”。当用户调用shmctl的IPC_RMID时,内存先查看多少个进程与这个内存关联着,如果关联数为0,就会销 毁这段共享内存,否者设置这段内存的mod的mode位为SHM_DEST,如果所有进程都不用则删除这段共享内存。

具体的用法总结如下:

1、显示所有的IPC设施

# ipcs -a

2、显示所有的消息队列Message Queue

# ipcs -q

3、显示所有的信号量

# ipcs -s

4、显示所有的共享内存

# ipcs -m

5、显示IPC设施的详细信息

# ipcs -q -i id

id 对应shmid、semid、msgid等。-q对应设施的类型(队列),查看信号量详细情况使用-s,查看共享内存使用-m。

6、显示IPC设施的限制大小

# ipcs -m -l

-m对应设施类型,可选参数包括-q、-m、-s。

7、显示IPC设施的权限关系

# ipcs -c

# ipcs -m -c

# ipcs -q -c

# ipcs -s -c

8、显示最近访问过IPC设施的进程ID。

# ipcs -p

# ipcs -m -p

# ipcs -q -p

9、显示IPC设施的最后操作时间

# ipcs -t

# ipcs -q -t

# ipcs -m -t

# ipcs -s -t

10、显示IPC设施的当前状态

# ipcs -u

Linux上的ipcs命令,不支持UNIX上的-b、-o指令,同样UNIX中不支持-l、-u指令,所以在编写跨平台的脚本时,需要注意这个问题。

 

下面的命令可以释放所有已分配的共享内存:

ipcs -m | awk ‘$2 ~ /[0-9]+/ print $2‘ | while read s; do sudo ipcrm -m $s; done

以上是关于linux ipcs命令详解的主要内容,如果未能解决你的问题,请参考以下文章

linux sar命令详解

linux sar命令详解

net user命令集合详解

linux下监控工具sar命令详解

oracle 共享内存查看 ipcs命令详解

DOS命令详解