关于linux上的java线程最大限制问题

发布于 2021-11-26 18:56:02 字数 225 浏览 539 评论 11

    java的线程开启,默认的虚拟机会分配1M的内存,但是在4G的windows上线程最多也就开到300多 ,是因为windows本身的一些限制?

    另外我想知道的是,在linux服务器上,linux默认给每个线程的内存是10M,那java在linux上开启线程到底是拿到1M还是10M的内存?不管是哪种方式, 一台4G的服务器,最多又能开多少个java线程呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(11

归途 2021-11-26 23:08:38

不知道32位和64位的虚拟机是否有区别?虚拟机的最大堆内存是否相关?

明媚如初 2021-11-26 23:08:34

确实有这样一个值,但小于这个值的话虚拟机无法启动,而没有影响在线程数上。

心舞飞扬 2021-11-26 23:08:19

回复
我的windows xp是32位系统,linux是64位系统,64位系统能创建的线程数要多一些。我后来是通过开多个进程,每个进程开5000个线程的方式解决大量连接的问题。

葬花如无物 2021-11-26 23:08:07

回复
和虚拟机最大堆内存没关系,应该和jvm帧栈的设置有关系。

做个少女永远怀春 2021-11-26 23:06:15

回复
好,谢谢,目前对Java虚拟机工作机制还不太了解

路还长,别太狂 2021-11-26 22:38:44

上面的计算公式我没有在linux上测试过,但在windows xp上,结果并不是如此。

参考:http://hllvm.group.iteye.com/group/topic/38597

我在windows xp上,单进程可创建线程约3200多,设置-Xss非常小也没有什么起色。

在linux上,单进程可创建线程约6000多(好像接近7000),设置-Xss非常小也没有什么起色。

我认为java创建线程有内部的限制,改变ss参数影响没那么大(如果ss值很大,效果倒是很明显,只能创建很少的线程)。

windows xp机器配置intel dual core 3.0G + 3G

linux配置intel i3700 + 16G

月亮是我掰弯的 2021-11-26 22:27:26

回复
我在本地4G linux机器上大约启动了7000多个线程后抛出了虚拟机级别异常。一般非IO密集型的应用是不需要启动那么多线程的,不仅不会提高效率,反而还会因为线程过多切换拖慢速度。

风透绣罗衣 2021-11-26 21:55:50

回复
我是用两台机器启动线程去访问另外的一台机器,

画骨成沙 2021-11-26 21:44:19

回复
好的,另外,5000个线程每个线程每隔100毫秒访问一次,服务器没秒钟接收到的请求大概是多少呢?这个值会很接近50000么?还是说由于cpu的竞争会少很多?

流心雨 2021-11-26 21:44:19

回复
如过两台4g linux机的话你带上-Xss64k跑5000个线程吧,我在本地测了是不会出错的

醉生梦死 2021-11-26 19:38:44

虚拟机给每个线程分配的内存(栈空间)是由虚拟机参数-Xss来指定的,在不同平台上对应的默认大小可以 在oracle的官方文档上查询到:

http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman /optionX.html

其中,Linux64位默认Xss值为256K,并非1M或10M

回到问题,一个Java进程可以启动的线程数可以通过如下公式计算:

     (系统剩余内存 - 最大堆容量Xmx - 最大方法区容量MaxPermSize)/ 最大栈空间Xss

   如此,4G的服务器单个进程可以开多少线程,可以粗略计算出来。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文