2015-12-04 1 views
2

Я наблюдаю странное поведение в ящике Linux. Код отлично работает на Win 7. Оскорбительный код зависает на xmlToJavaMap.keySet(). Ни один из двух операторов журнала не зарегистрирован !!! Никакой тупик не обнаружен в куче.Java ConcurrentHashMap.keySet() зависает

ConcurrentHashMap<String,String> xmlToJavaMap = ApplicationContext.getBean("map"); 
    logger.info("before for loop"); 
    for (String key : xmlToJavaMap.keySet()) { 
     logger.info("key: " + key); 
     ... 
    } 
    logger.info("map processed."); 

Платформа: Java версии "1.7.0_11" Java (TM) SE Runtime Environment (сборка 1.7.0_11-b21) Java HotSpot (TM) 64-разрядного сервера VM (сборка 23.6-B04, смешанный режим) Red Hat 4.4.7

+0

Вы хотите проверить, действительно ли этот код выполняется вообще или у вас может быть проблема в другом месте. Чтения ConcurrentHashMap должны быть неблокируемыми. – pvg

+0

Вот что озадачивает. Предполагается, что CHM.keySet() не будет заблокирован. Выполнение выполняется до цикла for, тогда ничего не происходит. Проблема началась несколько недель назад в одной из сред. – Prakash

ответ

1

Используйте jps -v для просмотра вашего java-процесса. Затем используйте jstack, чтобы посмотреть ваш стек потоков. Это может помочь вам найти решение.

+0

jastack dump огромный, и он не обнаруживает тупика! – Prakash

+0

Вы не можете выполнить выполнение, которое изолирует эту проблему? Это может уменьшить стек. – Andres

+0

Я мог бы это сделать. Его устаревший код (внутренняя сторонняя библиотека). – Prakash

0

Вот что на самом деле произошло :) xmlToJavaMap.keySet() на самом деле терпел неудачу с NoSuchMethod, и поток заканчивался. Трассировка стека ошибок регистрировалась в другом файле журнала, что вызывало путаницу. Как только ошибка была устранена, все возвращается к норме.

Смежные вопросы