Получение Threaddump java .lang.Thread.State: BLOCKED (на мониторе объекта) в org.hsqldb.Session.setAutoCommit (неизвестный источник) - PullRequest
0 голосов
/ 13 февраля 2020

Мы используем приложение Struts2 с моей базой данных SQL. Через несколько месяцев мы получаем Java дампов потоков, и приложение перестает отвечать.

Дампы потоков выглядят следующим образом: "http-0.0.0.0-8443-98" daemon prio = 10 tid = 0x0000000043229000 nid = 0x54be ожидает записи монитора [0x00007f8b3b8b0000] java .lang.Thread.State: BLOCKED (на мониторе объекта) в org.hsqldb.Session.setAutoCommit (неизвестный источник)

"http-0.0.0.0 -8443-179 "демон prio = 10 tid = 0x00007f8b3015c000 nid = 0x571f ожидает записи монитора [0x00007f8b2faf9000] java .lang.Thread.State: BLOCKED (на объектном мониторе) в орг. apache .tomcat.util. 1025 * .JIoEndpoint.recycleWorkerThread (JIoEndpoint. java: 724)

"http-0.0.0.0-8443-175" daemon prio = 10 tid = 0x00007f8b30163800 nid = 0x5713 в Object.wait () [0b00007 ] java .lang.Thread.State: WAITING (на мониторе объекта) в java .lang.Object.wait (собственный метод)

"Task-Thread-for-com.mchange.v2. asyn c. ThreadPerTaskAsynchronousRunner@2d2fa195 "демон prio = 10 tid = 0x000000005a06b800 nid = 0x5631 ожидает входа в монитор [0 x00007f8b34c4b000] java .lang.Thread.State: BLOCKED (на мониторе объекта) в org.hsqldb.DatabaseManager.getDatabase (неизвестный источник)

"http-0.0.0.0-8443-127" daemon prio = 10 tid = 0x000000005c334800 nid = 0x54e0 в ожидании записи монитора [0x00007f8b37c76000] java .lang.Thread.State: BLOCKED (на объектном мониторе) в org.hsqldb.Session.execute (неизвестный источник)

erler_Qu -3 "prio = 10 tid = 0x00007f8b714d4000 nid = 0x5ac6, ожидающих запись монитора [0x00007f8bed917000] java .lang.Thread.State: BLOCKED (на объектном мониторе) в com.octopus.scheduler.tasks.SreadThreadsActivesatecatecatecatecatecatecate java: 62)

Для базы данных мы используем

public class ConnectionManager {

/* Object stores the value of lock */
private static final Object lock = new Object();

/**
 * This method is used to get connection object holding the connection with
 * the database. This connection object is created using
 * 
 * @return Connection
 */
public Connection getDBConnection() {

    Connection conn = null;
    try {
        InitialContext initialContext = new InitialContext();

        IEntityManager manager = new EntityManager();

        String dataSource = manager.getDatsourceInstance(application,
                coreProduct);
        DataSource ds = (DataSource) initialContext.lookup("java:"
                + dataSource);

        if (ds != null) {
            conn = ds.getConnection();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    return conn;
}

/**
 * This method is use to generate the random id.
 * 
 * @return
 */
public String generateId() {
    return UUID.randomUUID().toString().substring(0, 13);
}

/**
 * This method is use to generate the id which contains the current system
 * time.
 * 

 */
public synchronized String generateNewId() {
    String id = "";
    synchronized (lock) {
        // id = String.valueOf(System.currentTimeMillis());
        id = String.valueOf(System.nanoTime());
    }
    return id;
}

Какие параметры, стандарты, конфигурации необходимы для уменьшения таких дампов, поскольку из-за того, что эти приложения перестают работать.

...