2014-12-20 25 views
3

我在OpenShift上遇到了WildFly AS的問題。當我嘗試在服務器上部署WAR時,我不斷收到以下異常。在OpenShift上重新啓動WildFly時出現內存不足錯誤

2014-12-20 04:31:33,072 INFO [org.jboss.as.connector.deployment] (MSC service thread 1-7) JBAS010406: Registered connection factory java:/JmsXA 
2014-12-20 04:31:33,444 ERROR [org.hornetq.core.client] (Thread-0 (HornetQ-client-global-threads-32821528)) HQ214017: Caught unexpected Throwable: java.lang.OutOfMemoryError: unable to create new native thread 
     at java.lang.Thread.start0(Native Method) [rt.jar:1.8.0_05] 
     at java.lang.Thread.start(Thread.java:714) [rt.jar:1.8.0_05] 
     at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:950) [rt.jar:1.8.0_05] 
     at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1368) [rt.jar:1.8.0_05] 
     at org.hornetq.core.client.impl.ClientSessionFactoryImpl$Channel0Handler.notifyTopologyChange(ClientSessionFactoryImpl.java:1618) [hornetq-core-client-2.4.5.Final.jar:] 
     at org.hornetq.core.client.impl.ClientSessionFactoryImpl$Channel0Handler.handlePacket(ClientSessionFactoryImpl.java:1609) [hornetq-core-client-2.4.5.Final.jar:] 
     at org.hornetq.core.protocol.core.impl.ChannelImpl.handlePacket(ChannelImpl.java:641) [hornetq-core-client-2.4.5.Final.jar:] 
     at org.hornetq.core.protocol.core.impl.RemotingConnectionImpl.doBufferReceived(RemotingConnectionImpl.java:556) [hornetq-core-client-2.4.5.Final.jar:] 
     at org.hornetq.core.protocol.core.impl.RemotingConnectionImpl.bufferReceived(RemotingConnectionImpl.java:532) [hornetq-core-client-2.4.5.Final.jar:] 
     at org.hornetq.core.client.impl.ClientSessionFactoryImpl$DelegatingBufferHandler.bufferReceived(ClientSessionFactoryImpl.java:1712) [hornetq-core-client-2.4.5.Final.jar:] 
     at org.hornetq.core.remoting.impl.invm.InVMConnection$1.run(InVMConnection.java:165) [hornetq-server-2.4.5.Final.jar:] 
     at org.hornetq.utils.OrderedExecutorFactory$OrderedExecutor$1.run(OrderedExecutorFactory.java:104) [hornetq-core-client-2.4.5.Final.jar:] 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_05] 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_05] 
     at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_05] 

我不知道它的相關但我認爲錯誤開始時,我添加了休眠到我的應用程序。這裏是hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 

     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
     <property name="connection.datasource">java:comp/env/jdbc/MyDataSource</property> 
     <property name="hibernate.current_session_context_class">thread</property> 

     <!-- GENERAL CONFIGURATION --> 
     <property name="connection.pool_size">1</property> 
     <property name="hibernate.show_sql">false</property> 
     <property name="hibernate.connection.release_mode">after_statement</property> 
     <property name="hibernate.connection.autocommit">false</property> 
     <property name="hibernate.connection.defaultAutoCommit">false</property> 

     <!-- DB MAPING --> 

    </session-factory> 
</hibernate-configuration> 

HibernateUtil.java

import org.hibernate.SessionFactory; 
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; 
import org.hibernate.cfg.Configuration; 
import org.hibernate.service.ServiceRegistry; 

public class HibernateUtil { 
    private static SessionFactory sessionFactory; 

    public static SessionFactory getSessionFactory() { 

     if (sessionFactory == null) { 
      // loads configuration and mappings 
      Configuration configuration = new Configuration().configure(); 
      ServiceRegistry serviceRegistry 
       = new StandardServiceRegistryBuilder() 
        .applySettings(configuration.getProperties()).build(); 

      // builds a session factory from the service registry 
      sessionFactory = configuration.buildSessionFactory(serviceRegistry);   
     } 

     return sessionFactory; 
    } 
} 

我DaoImpl我使用登錄名和部分:

public User login(String username, String password) { 

     User result = null; 

     Session session = HibernateUtil.getSessionFactory().openSession(); 
     try { 
      String sql = "select s from User s where username=:username and password=password(:password)"; 
      Query query = session.createQuery(sql); 
      query.setString("username", username); 
      query.setString("password", password); 
      result = (User) query.uniqueResult(); 
     } 
     finally { 
      session.close(); 
     } 

     return result; 
    } 

我不是100%舒爾其問題休眠,因爲我通過SSH連接刪除所有在wildfly/standalone/deployments/和重新啓動應用程序,但我仍然遇到錯誤,當我執行gear start命令。

2014-12-20 04:46:47,792 WARN [org.hornetq.core.server] (hornetq-failure-check-thread) HQ222082: error on connection failure check: java.lang.OutOfMemoryError: unable to create new native thread 
     at java.lang.Thread.start0(Native Method) [rt.jar:1.8.0_05] 
     at java.lang.Thread.start(Thread.java:714) [rt.jar:1.8.0_05] 
     at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:950) [rt.jar:1.8.0_05] 
     at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1357) [rt.jar:1.8.0_05] 
     at org.hornetq.utils.OrderedExecutorFactory$OrderedExecutor.execute(OrderedExecutorFactory.java:133) [hornetq-core-client-2.4.5.Final.jar:] 
     at org.hornetq.core.remoting.server.impl.RemotingServiceImpl$FailureCheckAndFlushThread.run(RemotingServiceImpl.java:739) [hornetq-server-2.4.5.Final.jar:] 

2014-12-20 04:46:48,674 ERROR [stderr] (Thread-0 (HornetQ-scheduled-threads-30017644)) Exception in thread "Thread-0 (HornetQ-scheduled-threads-30017644)" java.lang.OutOfMemoryError: unable to create new native thread 
2014-12-20 04:46:48,675 ERROR [stderr] (Thread-0 (HornetQ-scheduled-threads-30017644)) at java.lang.Thread.start0(Native Method) 
2014-12-20 04:46:48,675 ERROR [stderr] (Thread-0 (HornetQ-scheduled-threads-30017644)) at java.lang.Thread.start(Thread.java:714) 
2014-12-20 04:46:48,675 ERROR [stderr] (Thread-0 (HornetQ-scheduled-threads-30017644)) at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:950) 
2014-12-20 04:46:48,676 ERROR [stderr] (Thread-0 (HornetQ-scheduled-threads-30017644)) at java.util.concurrent.ThreadPoolExecutor.processWorkerExit(ThreadPoolExecutor.java:1018) 
2014-12-20 04:46:48,676 ERROR [stderr] (Thread-0 (HornetQ-scheduled-threads-30017644)) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1160) 
2014-12-20 04:46:48,676 ERROR [stderr] (Thread-0 (HornetQ-scheduled-threads-30017644)) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
2014-12-20 04:46:48,677 ERROR [stderr] (Thread-0 (HornetQ-scheduled-threads-30017644)) at java.lang.Thread.run(Thread.java:745) 
2014-12-20 04:46:49,675 ERROR [stderr] (Thread-2 (HornetQ-scheduled-threads-30017644)) Exception in thread "Thread-2 (HornetQ-scheduled-threads-30017644)" java.lang.OutOfMemoryError: unable to create new native thread 

回答

4

小齒輪具有250個線程的線程限制,儘量限制線程#用於消息傳遞服務50(或者甚至嘗試20取決於應用)。 該配置位於standalone.xml文件中。

如:

<subsystem xmlns="urn:jboss:domain:messaging:2.0"> 
    <hornetq-server> 
     <thread-pool-max-size>50</thread-pool-max-size> 
     <scheduled-thread-pool-max-size>50</scheduled-thread-pool-max-size>  

     <!-- ... --> 

    </hornetq-server> 
</subsystem> 

我希望這幫助。

+0

如果我不需要消息,我可以設置池大小爲1?或者它是由OpenShift用戶? – Kiki

+1

@Kiki如果你不需要消息,您可以從配置中移除消息子系統('standalone.xml'' ')。 –

5

看看這個thread

我發現我不得不禁用 不僅消息clustering.jgroups。不過,我之後偶爾會遇到OutOfMemoryError。我限制了數據庫連接池。默認情況下它是無限的。

可悲的是,這是不夠的,我還去了與

  • 管理執行人服務最大線程數25 - > 15
  • JCA:2.0螺紋50 - > 20

仍有沒有線程爲phpMyAdmin :(沮喪...

相關問題