首页 > 解决方案 > 64GB RAM 和 32vCPU VPS 上的 Java 应用程序 - 无法创建新的本机线程

问题描述

我们有一个 java 应用程序托管在两个不同的应用程序服务器上,每个应用程序服务器具有64GB RAM32vCPU。和 HaProxy 作为前面的负载均衡器。

在我们的 VPS 服务器中使用此设置,我们无法达到 100 个并发用户。即使我们有足够的可用内存(大约 40GB RAM),应用程序也会不断抛出以下错误消息。

ERROR org.springframework.boot.context.web.ErrorPageFilter - Forwarding to error page from request [/create-new] due to exception [unable to create new native thread]
java.lang.OutOfMemoryError: unable to create new native thread
    at java.lang.Thread.start0(Native Method) [na:1.8.0_262]
at java.lang.Thread.start(Thread.java:717) [na:1.8.0_262]
at org.codehaus.groovy.runtime.DefaultGroovyStaticMethods.createThread(DefaultGroovyStaticMethods.java:104) ~[groovy-2.4.5.jar:2.4.5]
at org.codehaus.groovy.runtime.DefaultGroovyStaticMethods.start(DefaultGroovyStaticMethods.java:58) ~[groovy-2.4.5.jar:2.4.5]
at sun.reflect.GeneratedMethodAccessor2752.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_262]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_262]
at org.codehaus.groovy.runtime.metaclass.ReflectionMetaMethod.invoke(ReflectionMetaMethod.java:54) ~[groovy-2.4.5.jar:2.4.5]
at org.codehaus.groovy.runtime.metaclass.NewStaticMetaMethod.invoke(NewStaticMetaMethod.java:53) ~[groovy-2.4.5.jar:2.4.5]
at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite$StaticMetaMethodSiteNoUnwrapNoCoerce.invoke(StaticMetaMethodSite.java:151) ~[groovy-2.4.5.jar:2.4.5]

内存

App1 # free -m
                              total        used        free      shared  buff/cache   available
                Mem:          65536        21480        44056           2        10341       33715
                Swap:             0           0           0

但是,在具有相同配置和设置的 AWS 上,该应用程序可以处理 200 多个并发用户。

我们很绝望,任何建议将不胜感激!

标签: javaspringmultithreadingcloudjava-threads

解决方案


推荐阅读