性能測試並發 300 請求時拋出:
HTTP Status 500 - Handler processing failed; nested exception is java.lang.OutOfMemoryError: unable to create new native thread
(MaxProcessMemory - JVMMemory - ReservedOsMemory) / ThreadStackSize = Number of threads
MaxProcessMemory:進程最大尋址空間(32 位約 2-4GB)JVMMemory:堆 + 永久區(-Xmx 設定值)ReservedOsMemory:系統預留內存ThreadStackSize:-Xss 設定值(默認 1MB)[root@RHEL63temp ~]# ulimit -a max user processes (-u) 1024 # 用戶進程/線程上限 stack size (kbytes, -s) 10240 # 線程棧大小 10MB
max user processes = 1024 遠大於 300,系統限制非瓶頸。
# catalina.sh 中添加 JAVA_OPTS="-server -Xmx384m -Xms128m -XX:PermSize=128M -XX:MaxPermSize=256m \ -Dcom.sun.management.jmxremote.port=9998 \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false \ -Djava.rmi.server.hostname=192.168.49.199"
客戶端庫不可直接用於高並發服務端場景。引入第三方庫前,必須評估其線程模型、資源佔用及釋放機制。