`
itspace
  • 浏览: 960777 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

linux 共享内存段研究

阅读更多
无论是在unix或者是linux都有命令查看主机共享内存段的使用情况,以下研究来自linux平台。
一、查看Oracle用户共享内存段使用情况
引用
[oracle@capaa ~]$ ipcs

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status     
0x00000000 917504     oracle    600        196608     2          dest        
0x00000000 950273     oracle    600        196608     2          dest        
0x00000000 983042     oracle    600        196608     2          dest        
0x00000000 1015811    oracle    600        196608     2          dest        
0x00000000 1081349    oracle    600        196608     2          dest        
0x00000000 1179656    oracle    600        196608     2          dest        
0x4cd26024 524300     oracle    640        562044928  55                     
0x00000000 1900559    oracle    600        12288      2          dest        
0x00000506 1802260    oracle    666        16384      0                      
0x00000000 1835029    oracle    600        196608     2          dest        

------ Semaphore Arrays --------
key        semid      owner      perms      nsems    
0xc7ef5bb0 98304      oracle    640        152      
0xc7ef5bb1 131073     oracle    640        152      
0xc7ef5bb2 163842     oracle    640        152      

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages 
 
简单说明:
shmid:表示共享内存段id
owner:表示共享内存段属于哪个用户,需要注意的是默认情况下600表示除root用户外不允许其他用户查看
bytes:表示共享内存段大小
nattch:表示连接到共享内存段的进程数
status:表示共享内存段的状态,dest表示该内存段被标记为destroyed状态。
二、查看共享内存段进程连接信息
1、指定shmid,查看进程连接信息
查看shmid为524300的具体信息,可用如下命令
引用
[oracle@capaa ~]$ ipcs -m -i 524300

Shared memory Segment shmid=524300
uid=505 gid=505 cuid=505        cgid=505
mode=0640       access_perms=0640
bytes=562044928 lpid=15216      cpid=16790      nattch=55
att_time=Wed Dec  9 13:44:45 2009 
det_time=Wed Dec  9 13:44:45 2009 
change_time=Fri Nov 27 15:58:44 2009

2、查看所有共享内存段,进程连接信息

引用
[oracle@capaa ~]$  ipcs -pm

------ Shared Memory Creator/Last-op --------
shmid      owner      cpid       lpid     
917504     oracle     30438      30967    
950273     oracle     30440      1286     
983042     oracle     31234      30967    
1015811    oracle     31236      30967    
1081349    oracle     31708      1275     
1179656    oracle     31661      30967    
524300     oracle     16790      15410    
1900559    oracle     1315       29959    
1802260    oracle     1286       0        
1835029    oracle     1315       29959


简单说明:
cpid表示创建共享内存段进程的id
lpid表示上一次访问该共享内存的进程id

三、查看Oracle使用共享内存段使用情况
1、使用Oracle小工具查看共享内存段使用情况
Oracle软件装好之后自带一个工具(sysresv),可以清晰的看到每个实例的内存使用情况,默认安装在$ORACLE_HOME/bin目录下,以下是sysresv的输出情况
引用
[oracle@capaa ~]$ sysresv

IPC Resources for ORACLE_SID "xe" :
Shared Memory:
ID              KEY
524300          0x4cd26024
Semaphores:
ID              KEY
98304           0xc7ef5bb0
131073          0xc7ef5bb1
163842          0xc7ef5bb2
Oracle Instance alive for sid "xe"

可以看到SID为xe的实例使用了shmid为524300的共享内存段
2、使用oradebug命令行查看共享内存段使用情况
1)连接到需要查看的数据库中
2)取得连接的os pid
引用
[oracle@capaa ~]$ ps -ef|grep LOCAL=YES
oracle   16497 16496  0 13:57 ?        00:00:00 oraclexe (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
3)根据os pid利用oradebug产生跟踪文件

SQL>  oradebug setospid 16497
Statement processed.
SQL> oradebug ipc
Information written to trace file.
SQL> oradebug tracefile_name
/var/oracle/admin/xe/udump/xe_ora_16497.trc

4)打开跟踪文件可以看到该实例共享内存使用情况,其中shmid为524300
引用
[oracle@capaa ~]$ cat /var/oracle/admin/xe/udump/xe_ora_16497.trc
/var/oracle/admin/xe/udump/xe_ora_16497.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME = /var/oracle/product/10.2.0/db_1
System name:    Linux
Node name:      capaa
Release:        2.6.18-53.el5xen
Version:        #1 SMP Mon Nov 12 02:46:57 EST 2007
Machine:        x86_64
Instance name: xe
Redo thread mounted by this instance: 1
Oracle process number: 55
Unix process pid: 16497, image: oracle@capaa (TNS V1-V3)

*** 2009-12-09 14:02:27.230
*** SERVICE NAME:(SYS$USERS) 2009-12-09 14:02:27.171
*** SESSION ID:(262.2351) 2009-12-09 14:02:27.171
Dump of unix-generic skgm context
areaflags            000000a7
realmflags           0000000f
mapsize              00001000
protectsize          00001000
lcmsize              00001000
seglen               00001000
largestsize  0000001000000000
smallestsize 0000000000400000
stacklimit     0x7fff2207dac0
stackdir                   -1
mode                      640
magic                acc01ade
Handle:            0x185252d0 `/var/oracle/product/10.2.0/db_1xe'
Dump of unix-generic realm handle `/var/oracle/product/10.2.0/db_1xe', flags = 00000000
Area #0 `Fixed Size' containing Subareas 0-0
  Total size 00000000001edba8 Minimum Subarea size 00000000
   Area  Subarea    Shmid      Stable Addr      Actual Addr
      0        0   524300 0x00000060000000 0x00000060000000
                              Subarea size     Segment size
                          00000000001ee000 0000000021802000
Area #1 `Variable Size' containing Subareas 2-2
  Total size 0000000021000000 Minimum Subarea size 00400000
   Area  Subarea    Shmid      Stable Addr      Actual Addr
      1        2   524300 0x00000060800000 0x00000060800000
                              Subarea size     Segment size
                          0000000021000000 0000000021802000
Area #2 `Redo Buffers' containing Subareas 1-1
  Total size 0000000000612000 Minimum Subarea size 00000000
   Area  Subarea    Shmid      Stable Addr      Actual Addr
      2        1   524300 0x000000601ee000 0x000000601ee000
                              Subarea size     Segment size
                          0000000000612000 0000000021802000
Area #3 `skgm overhead' containing Subareas 3-3
  Total size 0000000000002000 Minimum Subarea size 00000000
   Area  Subarea    Shmid      Stable Addr      Actual Addr
      3        3   524300 0x00000081800000 0x00000081800000
                              Subarea size     Segment size
                          0000000000002000 0000000021802000
Dump of Solaris-specific skgm context
sharedmmu 00000000
shareddec        0
used region        0: start 0000000040000000 length 000000007fff80000000
Maximum processes:               = 300
Number of semaphores per set:    = 152
Semaphores key overhead per set: = 4
User Semaphores per set:         = 148
Number of semaphore sets:        = 3
Semaphore identifiers:           = 3
Semaphore List=
98304
-------------- system semaphore information -------------
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status     
0x00000000 917504     oracle    600        196608     2          dest        
0x00000000 950273     oracle    600        196608     2          dest        
0x00000000 983042     oracle    600        196608     2          dest        
0x00000000 1015811    oracle    600        196608     2          dest        
0x00000000 1081349    oracle    600        196608     2          dest        
0x00000000 1179656    oracle    600        196608     2          dest        
0x4cd26024 524300     oracle    640        562044928  55                     
0x00000000 1900559    oracle    600        12288      2          dest        
0x00000506 1802260    oracle    666        16384      0                      
0x00000000 1835029    oracle    600        196608     2          dest        
------ Semaphore Arrays --------
key        semid      owner      perms      nsems    
0xc7ef5bb0 98304      oracle    640        152      
0xc7ef5bb1 131073     oracle    640        152      
0xc7ef5bb2 163842     oracle    640        152      
------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages  

四、进一步研究
通过以上命令可以查看创建Oracle实例的初始进程
[oracle@capaa ~]$ ipcs -mi 524300

Shared memory Segment shmid=524300
uid=505 gid=505 cuid=505        cgid=505
mode=0640       access_perms=0640
bytes=562044928 lpid=19796      cpid=16790      nattch=54
att_time=Wed Dec  9 14:10:26 2009 
det_time=Wed Dec  9 14:10:35 2009 
change_time=Fri Nov 27 15:58:44 2009 

通过cpid=16790 可以知道pid为16790启动了Oracle实例,该进程只负责启动Oracle实例,启动完成后通过“自杀”结束进程,可以从两方面得到验证
1)启动日志
引用
PMON started with pid=2, OS id=30345
PSP0 started with pid=3, OS id=30347
MMAN started with pid=4, OS id=30349
DBW0 started with pid=5, OS id=30351
LGWR started with pid=6, OS id=30353
CKPT started with pid=7, OS id=30355
SMON started with pid=8, OS id=30357
RECO started with pid=9, OS id=30359
CJQ0 started with pid=10, OS id=30361
MMON started with pid=11, OS id=30363

2)从v$process表中查相关信息
引用
SQL> select addr,program from v$process where pid=1;

ADDR             PROGRAM
---------------- ------------------------------------------------
00000000817DA930 PSEUDO

PSEUDO表示该进程已被killed


1
0
分享到:
评论

相关推荐

    Linux共享内存的研究与实现

    Linux系统提供了多种IPC机制,如信号、管道、信号量、消息队列、共享内存和套接字等,其中以共享 内存效率最高.

    基于Linux的同步共享内存的研究与实现

    基于Linux的同步共享内存的研究与实现 共享内存是L inux 中通信效率最高的通信机制, 需要与其他通信机制结合来同步进程。本文将信号量与共享内存结合, 利用信号量对共享内存的读ö写进行监控。然后将其作为通信方式,...

    论文研究-基于共享内存协同C/S模式的嵌入式设备管理方案研究 .pdf

    基于共享内存协同C/S模式的嵌入式设备管理方案研究,廖毅,姜秀柱,针对嵌入式通信设备中,传统C/S(Client/Server)模式管理方案处理多进程并发管理时速度慢、效率低的问题,研究了Linux系统的进程通信方

    论文研究-基于系统调用和共享内存的用户态和内核态通信 .pdf

    基于系统调用和共享内存的用户态和内核态通信,何华丽,,介绍了Linux内核态与用户态过程间实现通信的必要性,并给出Linux系统提供的几种常用内核与用户交换数据的机制。由于这几种机制在大��

    linux 通信机制研究

    linux 通信机制研究,包括管道,消息队列,信号量,套接字,共享内存,等方法的分析理论主要函数及例子

    嵌入式Linux应用程序开发标准教程(第2版全)

     《嵌入式Linux应用程序开发标准教程(第2版)》可作为高等院校电子类、电气类、控制类等专业高年级本科生、研究生学习嵌入式Linux的教材,也可供希望转入嵌入式领域的科研和工程技术人员参考使用,还可作为嵌入式...

    linux编程白皮书

    对深入研究Linux下的编程有很大的帮助。 目 录 雷蒙序 简介 Linux文档工程小组“公告” 译者序 第一部分 Linux内核 前言 第1章 硬件基础与软件基础 6 1.1 硬件基础 6 1.1.1 CPU 7 1.1.2 存储器 8 1.1.3 总线 8 ...

    深入理解LINUX内核(第三版)

    为了彻底理解是什么使得Linux能正常运行以及其为何能在各种不同的系统中运行良好,你需要深入研究内核最本质的部分。内核处理CPU与外界间的所有交互,并且决定哪些程序将以什么顺序共享处理器时间。它如此有效地管理...

    内存管理内存管理内存管理

    本文将对 Linux? 程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池...

    深入理解Linux内核

    为了彻底理解是什么使得Linux能正常运行以及其为何能在各种不同的系统中运行良好,你需要深入研究内核最本质的部分。内核处理CPU与外界间的所有交互,并且决定哪些程序将以什么顺序共享处理器时间。它如此有效地管理...

    深入理解linux内核

    为了彻底理解是什么使得Linux能正常运行以及其为何能在各种不同的系统中运行良好,你需要深入研究内核最本质的部分。内核处理CPU与外界间的所有交互,并且决定哪些程序将以什么顺序共享处理器时间。它如此有效地管理...

    《linux内核注释》

    共享你的改进,你的代码甚至会在官方发行的内核代码中出现,被全世界数百万计的人们所使 用。 开放源代码是指让开发者研究源代码并实现功能性扩展。Linux是全世界成长最快的操作系 统,开放源代码是其主要的原因...

    Linux内核工作原理 word版本 强烈推荐

    许多大学与研究机构都使用Linux完成他们的日常计算任务。人们在家用PC上使用Linux,许多公司也在使用它--尽管他们并不总是乐意承认这点。Linux主要用来浏览WEB,管理WEB站点,撰写与发送EMAIL,以及玩游戏。Linux绝对...

    Android代码-Android

    Binder与Ashm 为什么将Binder与Ashm匿名共享内存放在开头,因为Binder与Ashm是...Android提供了匿名共享内存的C运行库访问接口(但NDK不能使用),Java层也有访问接口,就是MemoryFile.java,通过研究MemoryFile可以

    操作系统(内存管理)

    文将对 Linux™ 程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半...

    LINUX系统管理白皮书

    4.4 与其他操作系统共享交换空间 224 4.5 交换空间的分配 224 4.6 缓冲区 225 第5章 引导和关机 227 5.1 概论 227 5.2 深入研究引导过程 227 5.3 关机详情 229 5.4 重新启动 230 5.5 单用户模式 230 5.6 ...

    Linux高性能服务器编程

    13.6.4 共享内存的POSIX方法 13.6.5 共享内存实例 13.7 消息队列 13.7.1 msgget系统调用 13.7.2 msgsnd系统调用 13.7.3 msgrcv系统调用 13.7.4 msgctl系统调用 13.8 IPC命令 13.9 在进程间传递文件描述符 ...

Global site tag (gtag.js) - Google Analytics