Java socket 使用线程通信,作为接收方每接收一个交易信息,使用jsonsole监控线程发现线程数量增加22个左右,经生产环境运行结果,当已启动线程总数达到2600多时 tomcat出现类似于假死的状况,不再接收任何交易信息。目前正在使用系统定时任务每天定时重启(每日交易量在70-80左右),求大手帮我分析下,现在附上图片和部分代码。jsonsole监控图:部分代码;public class SimpleServer {
public static ServerSocket serverSocket;//服务端Socket
private Socket clientSocket;//客户端Socket
private int port;//端口
public static ThreadPoolExecutor producerPool;//线程池
private Logger logger=Logger.getLogger(SimpleServer.class);
public SimpleServer(int port){
this.port=port;
try {
serverSocket=new ServerSocket(port);
logger.info(TimeHelper.getTime("yyyy-MM-dd-HH-mm-ss")+"本系统监听公积金中心服 务 启动......\n开始监听端口:"+port);
} catch (IOException e) {
logger.error(e.getMessage());
}
}
public void startServer() {
//初始化线程池
try {
producerPool= new ThreadPoolExecutor(20, 50, 1,
TimeUnit.SECONDS, new ArrayBlockingQueue(30),
new ThreadPoolExecutor.DiscardOldestPolicy());
}catch (Exception e) {logger.error(e.getMessage()); }
//开始监听端口
while(true){
try {
clientSocket=serverSocket.accept();
producerPool.execute(new ThreadPoolTask(clientSocket));//
} catch (IOException e) {
logger.error(e.getMessage());
}
}
}
}
Java socket通信 使用jconsole监控发现线程数不断增加
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 清水依恋成 2015-04-09 02:17关注
很纳闷,首先你的开发模式,tomcat本身已经是被动接收请求的server了,你在tomcat里又启动一个ServerSocket,应该用main函数单独进程启动,和你这么说,tomcat上的servlet是按照线程初始化,一次servlet交易就是一个线程。
解决 无用评论 打赏 举报
悬赏问题
- ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
- ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
- ¥15 谁有desed数据集呀
- ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
- ¥15 关于#hadoop#的问题
- ¥15 (标签-Python|关键词-socket)
- ¥15 keil里为什么main.c定义的函数在it.c调用不了
- ¥50 切换TabTip键盘的输入法
- ¥15 可否在不同线程中调用封装数据库操作的类
- ¥15 微带串馈天线阵列每个阵元宽度计算
- ¥70 2048小游戏毕设项目