免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2526 | 回复: 8
打印 上一主题 下一主题

sun15k上,semop 报错ENOSPC,请问该如何解决,急急急!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-22 14:26 |只看该作者 |倒序浏览
在solaris上执行semop时报错ENOSPC:
相关函数如下:
1.初始化函数
int init_shareBlk(char *lockID)
{
   union semun   arg;

    key = atoi(lockID);
        if ((shblk_sem_id = semget(key, 1, IPC_CREAT|0666)) < 0)
        {
            log_error(SHBLK_MODULE, "lock semaphore error");
            return shblk_sem_id;
        }
        arg.val = 0;
        semctl(shblk_sem_id, 0, SETVAL, arg);
}

2.加锁函数
void lock_shareBlk()
{
    struct sembuf lockops[2];
   
    lockops[0].sem_num = 0;
    lockops[0].sem_op = 0;
    lockops[0].sem_flg = 0;
    lockops[1].sem_num = 0;
    lockops[1].sem_op = 1;
    lockops[1].sem_flg = SEM_UNDO;
    semop(shblk_sem_id, lockops, 2);
}

3.解锁函数
void unlock_shareBlk()
{
    struct sembuf unlockop;
   
    unlockop.sem_num = 0;
    unlockop.sem_op = -1;
    unlockop.sem_flg = SEM_UNDO;
    semop(shblk_sem_id, &unlockop, 1);
}

同时有多个并发进程,都需要刷新共享内存,当运行一段时间后就会出现ENOSPC错误,
man semop:
  ENOSPC
      The  limit  on  the  number  of  individual  processes
                 requesting an SEM_UNDO would be exceeded.:

请问在sun 15k上调整哪个系统参数可以解决这个问题.谢谢!

论坛徽章:
0
2 [报告]
发表于 2006-11-22 14:30 |只看该作者
这个问题牛,估计800不会受理

solaris的版本都没有提? 好象跟15K没有关系, 如果不是指LZ的月薪的话

也许某个补丁能解决?

论坛徽章:
0
3 [报告]
发表于 2006-11-22 14:34 |只看该作者
这个问题好有深度.

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-03-19 06:20:00数据库技术版块每日发帖之星
日期:2016-07-05 06:20:00
4 [报告]
发表于 2006-11-22 14:40 |只看该作者
应该是与ENOSPC相关的内核参数太小吧

论坛徽章:
0
5 [报告]
发表于 2006-11-22 14:48 |只看该作者
SunOS cup4800-a 5.8 Generic_117350-38 sun4u sparc SUNW,Sun-Fire

System = SunOS
Node = cup4800-a
Release = 5.8
KernelID = Generic_117350-38
Machine = sun4u
BusType = <unknown>
Serial = <unknown>
Users = <unknown>
OEM# = 0
Origin# = 1
NumCPU = 8


内核参数
  set shmsys:shminfo_shmmax=17179869184
   set semsys:seminfo_semmap=250
   set semsys:seminfo_semmni=800
set semsys:seminfo_semmns=5000
set semsys:seminfo_semmsl=600
set semsys:seminfo_semmnu=600
set semsys:seminfo_semopm=100
set semsys:seminfo_semvmx=32767
set semsys:seminfo_semume=100

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-03-19 06:20:00数据库技术版块每日发帖之星
日期:2016-07-05 06:20:00
6 [报告]
发表于 2006-11-22 17:49 |只看该作者
查查手册,看下面的参数哪个有关。要不要试把800以下的都加大?呵呵
set shmsys:shminfo_shmmax=17179869184
set semsys:seminfo_semmap=250
set semsys:seminfo_semmni=800
set semsys:seminfo_semmns=5000
set semsys:seminfo_semmsl=600
set semsys:seminfo_semmnu=600
set semsys:seminfo_semopm=100
set semsys:seminfo_semvmx=32767
set semsys:seminfo_semume=100

论坛徽章:
0
7 [报告]
发表于 2006-11-23 00:20 |只看该作者
Hope this doc could help:

Solaris Tunable Parameters Reference Manual

Chapter 2
Solaris Kernel Tunables

http://docs.sun.com/app/docs/doc ... sj7?l=es&a=view

论坛徽章:
0
8 [报告]
发表于 2006-11-23 08:59 |只看该作者
是这个参数设置太小了,执行semop的进程使用了SEM_UNDO模式,这样每个进程会申请一个sem_undo结构,
set semsys:seminfo_semmnu=600

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-03-19 06:20:00数据库技术版块每日发帖之星
日期:2016-07-05 06:20:00
9 [报告]
发表于 2006-11-23 09:14 |只看该作者
[quote]原帖由 susbin 于 2006-11-23 00:20 发表
Hope this doc could help:

Solaris Tunable Parameters Reference Manual

Chapter 2
Solaris Kernel Tunables

http://docs.sun.com/app/docs/doc ... sj7?l=es&a=view [/quote

牛人,这是什么语言?

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP