首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Solaris、HP-UX和AIX中查找共享内存限制和信号量限制?

问如何在Solaris、HP-UX和AIX中查找共享内存限制和信号量限制?
EN

Stack Overflow用户
提问于 2015-04-24 15:18:06
回答 2查看 16.4K关注 0票数 2

我使用以下命令查找Linux中的共享内存限制和信号量限制。

为了找到共享内存限制,我使用了以下命令:

代码语言:javascript
复制
ipcs -lm

我得到了以下输出:

代码语言:javascript
复制
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 4194303
max total shared memory (kbytes) = 1073741824
min seg size (bytes) = 1

为了找到信号量限制,我使用了以下命令:

代码语言:javascript
复制
ipcs -ls

我得到了以下输出:

代码语言:javascript
复制
------ 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 = 32767

我不知道如何在Solaris、HP-UX和AIX中获得此输出。我在网上搜索了很多,但是我找不到好的解决方案。分享你的想法,提前得到这句感谢。

EN

回答 2

Stack Overflow用户

发布于 2015-04-24 19:27:04

试错

最简单和更健壮的方法是探测您是否可以分配这些资源,即:

代码语言:javascript
复制
int shmid = shmget(key, LARGE_BUFFER_SIZE, 0644 | IPC_CREAT);
void* data = shmat(shmid, NULL, 0);

if (data == (char *)(-1)) {
    /* Log an error and exit */
}

也就是说,Oracle数据库可以做到这一点。

Linux

在Linux上,这些限制是通过sysctl处理的。

代码语言:javascript
复制
$ /usr/sbin/sysctl kernel.shmmax
kernel.shmmax = 18446744073709551615
$ /usr/sbin/sysctl kernel.sem
kernel.sem = 250        256000  32      1024
             ^ SEMMSL   ^ SEMMNI

您可以从/proc/sys获取sysctl参数

代码语言:javascript
复制
$ cat /proc/sys/kernel/sem
250     256000  32      1024
$ cat /proc/sys/kernel/shmmax
18446744073709551615

Solaris 10之前版本

在Solaris中,使用了10个以前的内核参数。它们是在/etc/system中设置的。您可以从内核获取实际值,但仅当加载了shmsys和semsys模块时(Solaris在第一次系统调用时延迟加载它们):

代码语言:javascript
复制
# modload /kernel/sys/sparcv9/semsys
# modload /kernel/sys/sparcv9/shmsys
# echo 'shminfo_shmmax/J' | mdb -k
shminfo_shmmax:
shminfo_shmmax: 800000
# echo 'seminfo_semmni/J' | mdb -k
seminfo_semmni:
seminfo_semmni: a0000003c

请注意,我在mdb中使用了/J修饰符,它将8字节转换为十六进制。在32位版本中,您可能需要转储4字节的/X。

Solaris 10和更高版本

Solaris 10引入了一些项目,这些项目允许根据用户甚至进程的粒度来设置这些限制。使用prctl获取适当的限制:

代码语言:javascript
复制
# prctl -n project.max-shm-memory $$
process: 3451: bash
NAME    PRIVILEGE       VALUE    FLAG   ACTION                       RECIPIENT
project.max-shm-memory
        privileged       474MB      -   deny                                 -
        system          16,0EB    max   deny                                 -
# prctl -n project.max-sem-ids $$
process: 3451: bash
NAME    PRIVILEGE       VALUE    FLAG   ACTION                       RECIPIENT
project.max-sem-ids
        privileged        128       -   deny                                 -
        system          16,8M     max   deny                                 -
# prctl -n process.max-sem-nsems $$
process: 3451: bash
NAME    PRIVILEGE       VALUE    FLAG   ACTION                       RECIPIENT
process.max-sem-nsems
        privileged        512       -   deny                                 -
        system          32,8K     max   deny                                 - 

priviliged值就是您要寻找的值

票数 2
EN

Stack Overflow用户

发布于 2015-04-26 06:54:43

AIX

不幸的是,AIX没有任何命令可以输出您正在寻找的IPC限制。至少我没找到过..。我通常指的是this table,并假定我支持的AIX版本的公分母是最低的。

如果我需要以编程方式检测shell中的限制,我只需编写一个包装器函数/脚本,根据检测到的AIX版本封装表中列出的逻辑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29841074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档