进程超过RedHat Enterprise Linux 6的线程堆栈大小限制?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了进程超过RedHat Enterprise Linux 6的线程堆栈大小限制?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2197字,纯文字阅读大概需要4分钟。
内容图文
![进程超过RedHat Enterprise Linux 6的线程堆栈大小限制?](/upload/InfoBanner/zyjiaocheng/969/dffc3d7efa994126a88c2a0ab9002f7b.jpg)
我在RHEL 6.3上运行了几个进程,但由于某种原因,它们超出了线程堆栈大小.
例如,Java进程在启动时在运行时被赋予-Xss256k的堆栈大小,并且在实际代码中使用pthread_attr_setstacksize()为C进程提供1MB的线程堆栈大小.
但是出于某种原因,这些过程并没有坚持这些限制,我不确定为什么.
例如,当我跑
pmap -x <pid>
对于C和Java进程,我可以看到每个数百个’anon’线程(我已经确认这些线程是由每个进程创建的内部工作线程),但是这些线程的分配值各为64MB,而不是限制集以上:
00007fa4fc000000 168 40 40 rw--- [ anon ]
00007fa4fc02a000 65368 0 0 ----- [ anon ]
00007fa500000000 168 40 40 rw--- [ anon ]
00007fa50002a000 65368 0 0 ----- [ anon ]
00007fa504000000 168 40 40 rw--- [ anon ]
00007fa50402a000 65368 0 0 ----- [ anon ]
00007fa508000000 168 40 40 rw--- [ anon ]
00007fa50802a000 65368 0 0 ----- [ anon ]
00007fa50c000000 168 40 40 rw--- [ anon ]
00007fa50c02a000 65368 0 0 ----- [ anon ]
00007fa510000000 168 40 40 rw--- [ anon ]
00007fa51002a000 65368 0 0 ----- [ anon ]
00007fa514000000 168 40 40 rw--- [ anon ]
00007fa51402a000 65368 0 0 ----- [ anon ]
00007fa518000000 168 40 40 rw--- [ anon ]
...
但是当我使用所有64MB’anon’线程在上述过程中运行以下内容时
cat /proc/<pid>/limits | grep stack
Max stack size 1048576 1048576 bytes
它显示最大线程堆栈大小为1MB,所以我对这里发生的事情感到有点困惑.此外,调用这些程序的脚本也设置’ulimit -s 1024′.
应该注意的是,这似乎只在使用非常高端的机器(例如48GB RAM,24个CPU内核)时才会发生.问题不会出现在功能不太强大的机器上(例如4GB RAM,2个CPU内核).
任何帮助了解这里发生的事情将不胜感激.
解决方法:
事实证明,RHEL6 2.11已经改变了线程模型,使得每个线程都可以分配自己的线程池,因此在更大的系统上,您可能会看到它占用64MB.在64位上,允许的最大线程池数量更大.
对此的修复是添加
export LD_PRELOAD=/path/to/libtcmalloc.so
在启动进程的脚本中(而不是使用glibc2.11)
可以从以下方面获得更多信息:
Linux glibc> = 2.10(RHEL 6)malloc可能会显示过多的虚拟内存使用情况
https://www.ibm.com/developerworks/mydeveloperworks/blogs/kevgrig/entry/linux_glibc_2_10_rhel_6_malloc_may_show_excessive_virtual_memory_usage?lang=en
glibc bug malloc为多线程应用程序使用过多的内存
http://sourceware.org/bugzilla/show_bug.cgi?id=11261
Apache hadoop通过设置MALLOC_ARENA_MAX解决了这个问题
https://issues.apache.org/jira/browse/HADOOP-7154
内容总结
以上是互联网集市为您收集整理的进程超过RedHat Enterprise Linux 6的线程堆栈大小限制?全部内容,希望文章能够帮你解决进程超过RedHat Enterprise Linux 6的线程堆栈大小限制?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。