场景:
压力测试,一直测试一个接口,比如30秒内访问2W次,Java程序报错 "内存溢出,没有可用的线程"
分析:
线程数达到上限,可能是用户线程数达到峰值。
Linux 当前用户下输入以下命令 可以查看当前用户可用的最大线程数
ulimit -a
可用JProfiler连接该Java进程,线程视图下查看,可查看当前线程数量 和 具体堆栈信息。
发现确实线程数已达到25000+,确定达到当前用户最大线程数,分析代码,该接口每次任务需要启动一个线程进行后台操作,短时间内不能操作完成并关闭,导致线程积压。
解决:
1、同一IP 限流(Tomcat filter实现)
参考博客:
1、https://www.cnblogs.com/princessd8251/articles/3914434.html