一个关于JMS的有关问题,长期使用造成死机

   阅读
一个关于JMS的问题,长期使用造成死机
我用jms做了一个页面聊天程序,发送端是用ajax发送,接收端是用ajax每秒心跳接收,但是频繁死机,如果不发消息还好,可能不会死机,或者死机来的慢一点,我今天做压力测试,在发送端用js死循环不停调用发送端的ajax发送消息,第一次2分钟电脑死机(完全死掉了,鼠标什么的全不能动了),重启后再测没死,后来再测又死机了大约五六分钟的时候,这个死机是不定期的,有时候一启动很快就死了,有时候就比较长,请问会是什么原因造成的?我在网上查都查不到相关的案例,我简述一下我的程序流程吧:

发送端: 页面上输入文字-》点击发送-》ajax把消息传到后台-》后台建立于ActiveMQ的连接-》发送消息
接收端:由于是基于浏览器的web程序,受限于与服务器的请求响应模式,所以没用监听器,是通过每秒钟心跳完成的
每秒钟ajax请求后台相关程序-》程序建立于activeMQ的连接-》调用receive()方法接收消息-》如果有消息返回给浏览器,如果没有则返回空-》前台如果接到消息,显示在页面上,如果收到空,什么也不做

就是这个流程,我找了半天,不知道什么原因造成的死机,总之一开服务器(项目服务器用的Jboss),再开消息服务器(ActiveMQ),再开两个浏览器登陆两个账号,运行测试代码循环发送消息,就会造成不定期死机
我在网上查,怀疑是activeMQ需要优化一下,但是看网上的案例,不优化顶多就是慢,数据囤积太大造成阻塞,也没有说会死机的
------解决方案--------------------
把你js死循环发出来看看,是不是这个写的有问题。
------解决方案--------------------
死机是开的线程太多了。

为什么线程太多。检查自己的代码
------解决方案--------------------
你改下你的死循环改成ajax返回结果后再发起下一次,这样测试下看看。开始也没问清楚,是发送端死机还是客户端死机?
------解决方案--------------------
引用:
Quote: 引用:

关注一下
最好把代码贴一贴
接收端的

先将代码贴上,发送与接收方法,这两个方法不是在一个类里面

public void send() throws Exception{
//获取链接工厂(ActiveMQ消息服务方式)
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, "tcp://" + PropertiesRead.getPropertie("msg.ip") + ":" + PropertiesRead.getPropertie("msg.port"));
//从连接工厂获取连接
Connection connection = connectionFactory.createConnection();
//通过连接获取JMS会话
Session session = connection.createSession(false, QueueSession.CLIENT_ACKNOWLEDGE);
//获取消息目的(ActiveMQ消息服务方式)
Destination destination = session.createQueue("MessageQueue");
//用session创建消息生产者,并指定消息目的地
MessageProducer messageProducer = session.createProducer(destination);
//设置消息生产者生产的消息的 传递模式以及有效时间(非必须)
messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);
messageProducer.setTimeToLive(0);
// connection.start();
                 //flag是我用来标注即将要发的消息的类型,不同类型的我做不同处理,flag可以当做是正确的,它是这个类的一个成员变量,成员变量的定义,和发送接收无关,我就不都拿出来了
if("text".equals(flag)){
TextMessage textMessage = session.createTextMessage();
                        //这面这一堆都是给消息添加一些需要的属性
textMessage.setStringProperty("fromUser", ((TdAgent)request.getSession().getAttribute("loginUsers")).getAgentId());
if(null != ((TdAgent)request.getSession().getAttribute("loginUsers")).getNickName() && !"".equals(((TdAgent)request.getSession().getAttribute("loginUsers")).getNickName())){
textMessage.setStringProperty("fromUserName", ((TdAgent)request.getSession().getAttribute("loginUsers")).getNickName());
}else if(null != ((TdAgent)request.getSession().getAttribute("loginUsers")).getBelongUser() && !"".equals(((TdAgent)request.getSession().getAttribute("loginUsers")).getBelongUser())){
textMessage.setStringProperty("fromUserName", ((TdAgent)request.getSession().getAttribute("loginUsers")).getBelongUser());
}else{
textMessage.setStringProperty("fromUserName", ((TdAgent)request.getSession().getAttribute("loginUsers")).getAgentIp());
}
textMessage.setStringProperty("fromUserHead", ((TdAgent)request.getSession().getAttribute("loginUsers")).getPicture());
textMessage.setStringProperty("toUser", this.toUser);
textMessage.setStringProperty("messageType", "text");
textMessage.setStringProperty("sendTime", DateUtils.getStringFromDate(new Date(), "yyyy-MM-dd HH:mm:ss"));
textMessage.setText(this.msg);
// System.out.println(((TdAgent)request.getSession().getAttribute("loginUsers")).getAgentId() + "---" + this.toUser + "---" + this.msg);
messageProducer.send(textMessage);
}else if("file".equals(flag)){
String saveName = FileUtils.saveFile(file, fileFileName, "/uploadfile");
String httpPath = FileUtils.getHttpDownloadPath("/uploadfile", saveName);
TextMessage textMessage = session.createTextMessage();
textMessage.setStringProperty("fromUser", ((TdAgent)request.getSession().getAttribute("loginUsers")).getAgentId());
if(null != ((TdAgent)request.getSession().getAttribute("loginUsers")).getNickName() && !"".equals(((TdAgent)request.getSession().getAttribute("loginUsers")).getNickName())){
textMessage.setStringProperty("fromUserName", ((TdAgent)request.getSession().getAttribute("loginUsers")).getNickName());
}else if(null != ((TdAgent)request.getSession().getAttribute("loginUsers")).getBelongUser() && !"".equals(((TdAgent)request.getSession().getAttribute("loginUsers")).getBelongUser())){
textMessage.setStringProperty("fromUserName", ((TdAgent)request.getSession().getAttribute("loginUsers")).getBelongUser());
}else{
textMessage.setStringProperty("fromUserName", ((TdAgent)request.getSession().getAttribute("loginUsers")).getAgentIp());
}
textMessage.setStringProperty("fromUserHead", ((TdAgent)request.getSession().getAttribute("loginUsers")).getPicture());
textMessage.setStringProperty("toUser", this.toUser);
textMessage.setStringProperty("messageType", "file");
阅读