实验对象:
$ /usr/contrib/bin/machinfo
CPU info:
11 Intel(R) Itanium 2 9100 series processors (1.6 GHz, 18 MB)
533 MT/s bus, CPU version A1
22 logical processors (2 per socket)
Memory: 89914 MB (87.81 GB)
Firmware info:
Firmware revision: 9.048
FP SWA driver revision: 1.18
IPMI is supported on this system.
BMC firmware revision: 4.01
Platform. info:
Model: "ia64 hp server rx8640"
Machine ID number: b24e5d6e-acdd-11de-9bbf-a49fa173a3ab
Machine serial number: SGH49342W6
OS info:
Nodename: GDWDB
Release: HP-UX B.11.31
Version: U (unlimited-user license)
Machine: ia64
ID Number: 2991480174
vmunix _release_version:
@(#) $Revision: vmunix: B.11.31_LR FLAVOR=perf
测试目的:
使用ipcs –mob观察oracle使用ipc共享内存的情况,发现共享内存被分为多个内存段,按资料所说共享内存划分为多个段对oralce的性能有重大的影响。因此本次此时的目的是测试内核参数是否设置正确。
测试源码:
#include
#include
#include
#include
#define SHM_SIZE 21474836480
#define SHM_MODE 0600 /* user read/write */
char array[ARRAY_SIZE]; /* uninitialized data = bss */
int
main(void)
{
int shmid;
char *ptr, *shmptr;
key_t key = ftok(“/home/oracle/test”, ‘A’);
if ((shmid = shmget(key, SHM_SIZE, SHM_MODE | IPC_CREAT)) < 0)
printf("shmget error");
if ((shmptr = shmat(shmid, 0, 0)) == (void *)-1)
printf("shmat error");
printf("shared memory attached from %lx to %lx\n",
(unsigned long)shmptr, (unsigned long)shmptr+SHM_SIZE);
getc(stdin);
if (shmctl(shmid, IPC_RMID, 0) < 0)
printf("shmctl error");
}
cc +DD64 test.c test
1. 执行测试程序前
ipcs –mob:
$ ipcs -mob
IPC status from /dev/kmem as of Sun Sep 20 06:09:14 2009
T ID KEY MODE OWNER GROUP NATTCH SEGSZ
Shared Memory:
m 0 0x412006cb --rw-rw-rw- root root 0 348
m 1 0x4e0c0002 --rw-rw-rw- root root 2 61760
m 2 0x41241c5a --rw-rw-rw- root root 1 8192
m 3 0x00a5c581 --rw------- sfmdb users 7 10469376
m 4 0x412014fa --rw------- root root 1 4096
m 5 0x4918b784 --rw-r--r-- root root 0 22912
m 3047430 0x40244b22 --rw-rw-rw- mqm mqm 0 1000
m 32775 0x00000000 --rw-r----- oracle oinstall 19 6442450944
m 8 0x00000000 --rw-r----- oracle oinstall 19 6465085440
m 9 0x00000000 --rw-r----- oracle oinstall 19 6459228160
m 10 0x00000000 --rw-r----- oracle oinstall 19 2166505472
m 11 0xf4b45100 --rw-r----- oracle oinstall 19 45056
2. 测试程序分配20G的共享内存:
./test&
3. 执行测试程序后
ipcs –mob
$ ipcs -mob
IPC status from /dev/kmem as of Sun Sep 20 06:07:16 2009
T ID KEY MODE OWNER GROUP NATTCH SEGSZ
Shared Memory:
m 0 0x412006cb --rw-rw-rw- root root 0 348
m 1 0x4e0c0002 --rw-rw-rw- root root 2 61760
m 2 0x41241c5a --rw-rw-rw- root root 1 8192
m 3 0x00a5c581 --rw------- sfmdb users 7 10469376
m 4 0x412014fa --rw------- root root 1 4096
m 5 0x4918b784 --rw-r--r-- root root 0 22912
m 3047430 0x40244b22 --rw-rw-rw- mqm mqm 0 1000
m 32775 0x00000000 --rw-r----- oracle oinstall 18 6442450944
m 8 0x00000000 --rw-r----- oracle oinstall 18 6465085440
m 9 0x00000000 --rw-r----- oracle oinstall 18 6459228160
m 10 0x00000000 --rw-r----- oracle oinstall 18 2166505472
m 11 0xf4b45100 --rw-r----- oracle oinstall 18 45056
m 1900556 0x41140055 --rw------- oracle oinstall 1 21474836480
共享内存分配有两种方式:私有方式和共享方式。私有方式只能由创建进程或子进程所共享,其他进程无法访问,该方式的共享内存KEY=0x00000000。而共享方式的共享内存可以被其他进程所使用,并且使用KEY作为接入参数,如图ID=11的共享内存段。
根据上图分析oracle只划分了1个共享方式的共享内存段(4K),而其他的使用私有方式分配。
通过测试,证明shmmax已经正确设定,系统支持分配足够大的共享内存空间。
而oracle分配多段共享内存的原因推断不是由于内核参数设置的问题,至少不是shmmax的设置问题,问题的根源也只能由oracle提供服务了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13605188/viewspace-615101/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/13605188/viewspace-615101/