我在我的应用程序中使用jsp-servlet。并在jboss 7.0.2服务器上部署了战争。我有servlet有与数据库相关的代码,并且以秒为单位被调用很多次(比如说500次)。但是对于这么多线程来说,jboss 7.0.2将无法处理这个线程。
我正在使用64位jvm。
我用-Xss256k减少了线程堆栈的大小,这对我不起作用。
我在jboss.conf中进行了配置
wrapper.java.additional.10 = -XX:ThreadStackSize = 256K
我需要在jboss7上处理2000个线程。
server(jboss7.0.2)抛出异常。
java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Unknown Source)
这是我的servlet java.lang.OutOfMemoryError:无法创建新的本机线程
public class Test extends HttpServlet {
private static final long serialVersionUID = 1L;
public Test() {
super();
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
public void processRequest(HttpServletRequest request,
HttpServletResponse response) {
Logger log=LoggerFactory.getLogger(feedback.class);
/* here is my code to insert the data in database. */
TestClass testobj = new TestClass();
testobj.setparam("");
smsmanager1.add(sms);
smsmanager1 = null;
sms = null;
}
}
code fot add method
public void add(T obj) {
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session=sessionFactory.openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
session.save(obj);
transaction.commit();
session.flush();
} catch (HibernateException e) {
if(transaction!=null){
transaction.rollback();}
e.printStackTrace();
} finally {
if(session!=null){
session.close();}
session = null;
transaction = null;
}
我已经测试了具有唯一一个控制台打印语句的空白servlet。它工作正常,但它不适用于上面的servlet。
我现在正走在正确的轨道上吗?服务器如何处理超过500-800个线程的servlet?
答案 0 :(得分:1)
Varsha;
2000个线程听起来像是太多线程。您没有提到目标计算机有多少处理器,但我相信对于Tomcat,每个处理器的经验最大值大约为200-250,因此保守地说,您需要10个[reserved(+)]处理器来支持2000个并发线程。
(+)我说保留,因为显然你也需要其他东西的处理器容量。
更重要的是,请记住,每个线程都需要获取,使用和释放数据库连接,因此您的应用程序服务器或数据库不太可能实现或维持这种吞吐量。如果您只是尝试分配这些资源,您将淹没您的系统并开始收到您所概述的错误。
我会考虑以下前提重新考虑您的方法:
干杯。
PS。这是关于如何计算满足特定数量和流量内容所需节点数量的good presentation。