JAVA应用允许创建的最大线程个数缺省是400+线程,以保证整个系统的稳定。目前应用服务的线程主要包括以下几类:
- tomcat请求处理线程
- dubbo处理线程
- 其他创建线程
我们需要控制java线程个数,否则应用会占用过多系统资源。
通过修改配置,可以控制应用的线程个数。具体方法如下:
- tomcat, 修改cconf/server.xml,增加属性: maxThreads="100", 比如:
<Connector port="12011" protocol="HTTP/1.1" maxThreads="100" connectionTimeout="20000" redirectPort="8443" />
- dubbo,修改dubbo协议的配置参数,比如:
<dubbo:protocol name="dubbo" port="13011" dispatcher="all" threadpool="fixed" threads="50"/>
另:以下是查看线程信息的一些命名,供参考
- 显示某个进程(PID)的所有线程运行情况
top -H -p $PID
- 每隔5秒显示某个进程(PID)下的特定线程(TID)的堆栈信息
watch -n 5 jstack $PID | awk '/ nid='"$(printf '%#x' $TID)"' /,/^$/'
- 每隔10秒显示某个应用(APP)的线程总数
while true; do echo $APP `ps -eLF |grep $APP | grep apps |wc -l; date;`; sleep 10; done