Sparc平台Solaris10系统ACE创建多线程的问题

8 views
Skip to first unread message

Ming Zha

unread,
Nov 7, 2009, 2:55:07 AM11/7/09
to dev4s...@googlegroups.com
最近在Solaris10的系统上运行运行一个多线程的服务器,遇到一个奇怪的现象,不知哪位高人能指点一下:
在一个进程的主线程内不断创建detach方式的工作线程,创建到线程id为65536后就一直创建失败,
显示错误码为11,resource temporarily unavailable
每个工作线程只是简单输出一行信息就退出
使用prstat查看,该进程内也没有发现未退出的线程
 
简单的测试代码片段如下:
 
void* worker (void *arg)
{
 ACE_DEBUG((LM_DEBUG, ACE_TEXT ("[%D][%P-%t][%M] %N(%l):\n") ACE_TEXT("A NewThread is running!\n")));
 return NULL;
}
 
int main(int argc, char *argv[])
{
while(true)
 {
       ACE_DEBUG((LM_DEBUG, ACE_TEXT ("[%D][%P-%t][%M] %N(%l):\n") ACE_TEXT("main thread!\n")));
       ACE_thread_t threadid;
       ACE_hthread_t threadHandle; 
       int ret = ACE_Thread::spawn(
                                            (ACE_THR_FUNC)worker,
                                            NULL,
                                            THR_DETACHED|THR_NEW_LWP,
                                            &threadid,
                                            &threadHandle
                                            );
        if(ret != 0)
        {
                        ACE_DEBUG((LM_DEBUG, ACE_TEXT ("[%D][%P-%t][%M] %N(%l):\n") ACE_TEXT("thread activate failed, ret:%d, errno:%d:%s\n"), ret, errno, strerror(errno)));
         }
         ACE_OS::sleep(ACE_Time_Value(0, 500000));
   }
}
 

stephen liu

unread,
Nov 7, 2009, 4:20:46 AM11/7/09
to dev4s...@googlegroups.com
resource temporarily unavailable 通常是 stack 的内存不够了,导致不能创建线程。

如果系统创建线程的速度足够快,有可能导致主线程连续创建了N个线程(比如1024),然后才进行切换。
在切换之前,所有的 N 个线程,都还没有开始运行。这些线程每个都会占用一定的 stack 内存,通常是 8M 。
按 2G 地址空间来算,每个 8M ,最多也就允许 256 个线程同时存在。

可以查查系统默认的线程 stack 大小。

2009/11/7 Ming Zha <ming...@gmail.com>:

Tomt

unread,
Nov 7, 2009, 8:14:49 AM11/7/09
to dev4s...@googlegroups.com
是线程来不及释放,还是socket资源来不及释放?stacksize 可以改小一些。

Ming Zha

unread,
Nov 10, 2009, 10:44:14 PM11/10/09
to dev4s...@googlegroups.com
多谢楼上几位的建议,
目前问题基本定位,ACE_Task对象的activate()方法中去除THR_NEW_LWP标志位,
否则只能创建到65536个线程,似乎与stacksize的问题无关。

Reply all
Reply to author
Forward
0 new messages