| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Lock в класслоадере очень надолго (15 сек)! |
| Автор: Barvetal 3.6.2008, 15:57 |
| Всем привет! Решили произвести нагрузочное тестирование нашего сайта. Страницы начали не отдаваться по 10-30 секунд... Посмотрел, что происходит в дампе потоков. Происходит следующее: Один из потоков берет лок (на момент дампа потоков этот поток обрабатывал клиентский запрос 16 секунд): java.lang.Thread.State: RUNNABLE at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) - locked <0x74d489a8> (a sun.misc.Launcher$ExtClassLoader) at java.lang.ClassLoader.loadClass(ClassLoader.java:299) - locked <0x74d48960> (a sun.misc.Launcher$AppClassLoader) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276) - locked <0x74d48960> (a sun.misc.Launcher$AppClassLoader) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1274) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1205) at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:95) at org.hibernate.impl.SessionFactoryImpl.getImplementors(SessionFactoryImpl.java:683) at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1543) at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283) at net.myorg.persistence.dao.GenericDao.loadByFieldsEqOrLike(GenericDao.java:187) at net.myorg.persistence.dao.GenericDao.loadByFields(GenericDao.java:159) at net.myorg.persistence.dao.GenericDao.loadByField(GenericDao.java:138) at net.myorg.persistence.utils.UrlUtils.getDocListUrl(UrlUtils.java:96) at net.myorg.persistence.utils.UrlUtils.getDocListUrl(UrlUtils.java:103) at net.myorg.portal.calendar.Renderer.getWeeks(Renderer.java:265) at net.myorg.portal.calendar.View.pageBeginRender(View.java:137) at org.apache.tapestry.AbstractPage.firePageBeginRender(AbstractPage.java:478) at org.apache.tapestry.AbstractPage.renderPage(AbstractPage.java:268) at org.apache.tapestry.engine.RequestCycle.renderPage(RequestCycle.java:366) at org.apache.tapestry.portlet.PortletRendererImpl.renderPage(PortletRendererImpl.java:76) ....... этого лока ждут другие 74 потока: java.lang.Thread.State: BLOCKED (on object monitor) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:269) - waiting to lock <0x74d48960> (a sun.misc.Launcher$AppClassLoader) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1274) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1205) at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:95) at org.hibernate.impl.SessionFactoryImpl.getImplementors(SessionFactoryImpl.java:683) at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1543) at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283) at net.myorg.persistence.dao.GenericDao.loadByFieldsEqOrLike(GenericDao.java:187) at net.myorg.persistence.dao.GenericDao.loadByFields(GenericDao.java:159) at net.myorg.persistence.dao.GenericDao.loadByField(GenericDao.java:138) at net.myorg.persistence.utils.UrlUtils.getDocListUrl(UrlUtils.java:96) at net.myorg.persistence.utils.UrlUtils.getDocListUrl(UrlUtils.java:103) at net.myorg.portal.calendar.Renderer.getWeeks(Renderer.java:265) at net.myorg.portal.calendar.View.pageBeginRender(View.java:137) at org.apache.tapestry.AbstractPage.firePageBeginRender(AbstractPage.java:478) at org.apache.tapestry.AbstractPage.renderPage(AbstractPage.java:268) at org.apache.tapestry.engine.RequestCycle.renderPage(RequestCycle.java:366) at org.apache.tapestry.portlet.PortletRendererImpl.renderPage(PortletRendererImpl.java:76) ....... Самомум старому потоку из них - 81 секунда! Почему первый поток выполняет так долго java.lang.ClassLoader.loadClass? Как устранить проблему? Заранее большое спасибо! |
| Автор: alexadr 3.6.2008, 18:41 |
| Возможно поможет загрузка класслоадером определенных классов(тех что долго грузятся java.lang.ClassLoader.loadClass) на стадии инициализации приложения. |