зависающая страница в Tomcat и Logger
От: phront  
Дата: 07.12.10 10:39
Оценка:
всем доброго времени суток

мучает одна проблема. непонятно почему зависает JSP страница.
зависает при условии:
— если в нижеписаном фрагменте отработает metka1
— если внутри геттера произойдет исключение, когда Config используется как bean

jstack показывает блок в waiting to lock <0x0917fd88> (a org.apache.tomcat.util.log.SystemLogHandler)

никто не может объяснить почему происходит такая беда ?
очень неприятно осознавать, что такое может случится на production-е.


ms windows7
netbeans 6.9.1.
tomcat 6.0.26
jdk 1.6.0_20

класс Config

package package1;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;

public class Config {

    public volatile static Config instance;
    XMLConfiguration xml = null;

    public Config() {
    }

    private Config(String configFile) {
        try {
            xml = new XMLConfiguration(configFile);
        } catch (ConfigurationException ex) {
            metka1:// Exception точно произойдет
            xml = null;
            Logger.getLogger(Config.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Get the value of instance
     *
     * @return the value of instance
     */
    public static Config getInstance() {
        if (instance == null)
        {
            synchronized (Config.class)
            {
                if (instance == null)
                {
                    instance = new Config ("file not found");
                }
            }
        }

    }

    public String getServerName ()
    {
        return getInstance().xml.getString("serverName");
    }
}


страница JSP:
<jsp:useBean id="cfg" scope="application" class="package1.Config" />  
<c:out value="${cfg.serverName}"/>



спасибо
Re: зависающая страница в Tomcat и Logger
От: Blazkowicz Россия  
Дата: 07.12.10 10:59
Оценка:
полный thread dump можно увидеть? Из объяснения не особо понятно.
Re[2]: зависающая страница в Tomcat и Logger
От: phront  
Дата: 07.12.10 12:19
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>полный thread dump можно увидеть? Из объяснения не особо понятно.


залил сюда
http://pastebin.com/wbhy1iW0
Re[3]: зависающая страница в Tomcat и Logger
От: Blazkowicz Россия  
Дата: 07.12.10 12:32
Оценка:
Здравствуйте, phront, Вы писали:

P>залил сюда

P>http://pastebin.com/wbhy1iW0

http-8084-1 уверенно дампит данные в лог. Остальные все его ждут. Throwable синхронизируется по PrintStream для того чтобы stacktrace записался в лог целостно, а не вперемещку с другими исключениями.
В вашем дампе всё упирается в UserFilter, про приведенный конфиг нет ни слова.
Re[4]: зависающая страница в Tomcat и Logger
От: Blazkowicz Россия  
Дата: 07.12.10 12:35
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>http-8084-1 уверенно дампит данные в лог. Остальные все его ждут. Throwable синхронизируется по PrintStream для того чтобы stacktrace записался в лог целостно, а не вперемещку с другими исключениями.

B>В вашем дампе всё упирается в UserFilter, про приведенный конфиг нет ни слова.

Возможно у вас Throwable.printStackTrace() используется интенсивно, что и создаёт узкое место. Используйте нормальный логгер вместо этого.
Re[5]: зависающая страница в Tomcat и Logger
От: phront  
Дата: 07.12.10 13:22
Оценка:
> http-8084-1 уверенно дампит данные в лог.
http-8084-1 — завис первым
при вызове printStackTrace внутри фильтра, почему то зависает запись в поток
это происходит только в случае, если отработала metka1

B> Используйте нормальный логгер вместо этого.

да, видимо какая то несовместимость в логгерах

меня беспокоит следующее соображение: так как причина явления не выяснена, могут быть большие затруднения если какая нить сторонняя библиотека использует подобный printStackTrace
Re[6]: зависающая страница в Tomcat и Logger
От: Blazkowicz Россия  
Дата: 07.12.10 13:34
Оценка:
Здравствуйте, phront, Вы писали:

>> http-8084-1 уверенно дампит данные в лог.

P>http-8084-1 — завис первым
P>при вызове printStackTrace внутри фильтра, почему то зависает запись в поток
P>это происходит только в случае, если отработала metka1
Вероятно, потому что UserFilter падает без конфигурации. Разве нет?

B>> Используйте нормальный логгер вместо этого.

P>да, видимо какая то несовместимость в логгерах
Какая ещё не совместимость? Не используйте метод printStackTrace в продакшне. И покажите исходники вашего фильтра. Очевидно что проблема в нем, он просто всегда падает, если конфигурация отсутствует.
Re[7]: зависающая страница в Tomcat и Logger
От: phront  
Дата: 07.12.10 14:07
Оценка:
B>Вероятно, потому что UserFilter падает без конфигурации. Разве нет?
B>Какая ещё не совместимость? Не используйте метод printStackTrace в продакшне. И покажите исходники вашего фильтра. Очевидно что проблема в нем, он просто всегда падает, если конфигурация отсутствует.

http://pastebin.com/M4SXF5zZ
Re[8]: зависающая страница в Tomcat и Logger
От: Blazkowicz Россия  
Дата: 07.12.10 14:39
Оценка:
Здравствуйте, phront, Вы писали:

B>>Вероятно, потому что UserFilter падает без конфигурации. Разве нет?

B>>Какая ещё не совместимость? Не используйте метод printStackTrace в продакшне. И покажите исходники вашего фильтра. Очевидно что проблема в нем, он просто всегда падает, если конфигурация отсутствует.

P>http://pastebin.com/M4SXF5zZ


Уберите t.printStackTrace() совсем. И смотрите какие исключения выводятся на страницу или в лог. Я не вижу никаких зависаний. У вас просто постоянно система выбрасывает исключения, на которые вы не смотрите.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.