|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
Напиши по крайне мере конфигурацию сервера. Сколько процессоров, памяти Что запущено Сколько выделено под JVM, ключи в строке запуска или посмотреть через JConsole Базовые средства - есть в самой Java (JConsole). JDK можно тупо скопированием в свой home директорий, инсталятор запускать не нужно, т.е. операция совершенно безопасная. Подключаться удобнее на самом сервере. Т.е. можно конечно сконфигурировать удаленное управление/настройку/мониторинг/отлатку, но это нужно разбираться и иметь "прямые руки" у админов (в том числе на уровне ОС, SSH, виртуалок, маршрутизаторов как минимум разрешить прохождение/проброс нужных портов). Т.ч. самое простое: 1) прямо на сервере посмотреть командами ОС (например банальный top) что с памятью в системе, чем она забита. Админы это уметь должны. Падает именно по нехватке памяти ОС! 2) JConsole посмотреть что с памятью в Java. Лучше под реальной нагрузкой. 3) Запинать начальство, что бы оно поискало, какие были требования/рекомендации от разработчиков. Если раньше работало стабильно, а сейчас стало падать - скорее всего что-то поменялось. Может пользователей добавилось - может просто требуется добавить памяти в сервак/поставить новый. Если же действительно утечки памяти - то или обращаться к раззработчикам или нанимать Java программиста. Исходники конечно желательны, но в принципе, можно и декомпилятором классы декомпилировать. IMHO & AFAIK сорри за много-букв в общем, в порядке обратном написанному в ветке: 1. Посмотреть память командами ОС 2. JConsole сообщение 21734415 3. Найти где настраиваются ключи запуска JVM добавить туда: максимально подробный лог GC - по логу можно построить график потребления памяти генерацию дампа памяти при падении или по Ctrl-C 4. попытаться настроить ключи JVM GC. Как минимум, __уменьшать__ память, что бы по native memory alocation не падали. Сколько настраивать памяти, будет понятно по 1 + 2 настроить память -Xms равные -Xmx (константой), уменьшить(поставить константой) PermGen / Metaspace, уменьшить (поставить константой) Non heap Я бы убрал "automatic memory management, java умная, ей виднее" и жестко настроил eden и old gen Когда упадете по нормальной java out of memory (не native): 1. поставить перед начальством вопрос о докупить памяти 2. можно смотреть дамп. 21733360 Если раньше работало нормально, то возможно метод "докупить память в сервер" - будет самым дешевым решением ))) IMHO & AFAIK еще раз ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2018, 15:10 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, на скрине есть все, что нужно по конфигурации сервера? Где посмотреть сколько выделяется под JVM? С native memory allocation старый файл, я просто хотел узнать, как подобный можно сформировать/получить. Как подключить томкат к jvm? Насчет требований от разрабов: они давным-давно поддерживали приложение, но потом от их услуг отказались, а у нас, кто этим занимались - ушли (говорили, что ВРОДЕ раньше таких проблем не было, в том плане, переодически ребутать приходилось томкат из-за сжирания всей памяти). ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2018, 11:47 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
Кто там что говорил, про неправильность выделения дополнительной памяти для JVM, потому, что "её и так не хватает"? На серваке свободно 12 гигабайт из 64, а несчастному котяре, от щедрот, выделили всего четвертушку. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2018, 12:22 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
Basil A. SidorovКто там что говорил, про неправильность выделения дополнительной памяти для JVM..... Как бы ошибка говорила. Native memory allocation..... Basil A. SidorovLeonid Kudryavtsev, на скрине есть все, что нужно по конфигурации сервера? Ну смотреть параметры памяти лучше под реальной нагрузкой. В Вашем скриншоте смысла особого нет, т.к. видно, что JVM недавно запущена. Вроде JConsole еще показывает с какими параметрами (ключами строки запуска), работает JVM. 1) по скрину можно __предположить__, что на сервере всего крутиться дофига и больше. Т.е. по русски "помойка" Total phisical memory = 64 GB Free phisical memory = 17 Процессоров тоже 8 штук. Вообще-то, Java крайне плохо преспособлена для работы в режиме "выделенный сервер коллективного пользования 100500 сервисами" Дефолтные значения при запуске JVM выбираются из предположения, что JVM на сервере ОДНА. Если на сервере много процессоров и 100500 штук JVM - дефолтные параметры JVM крайне не оптимальны, избыточно и даже "бредовые" (нарывался на 40 процессорной машине). Мое IMHO, на сервере, ресурсы должны быть выделены службам раз и навсегда. Т.ч. выделить нормально памяти приложениям по __константам__. Xmx==Mms, PermGen / Metaspace - константа, NonHeapMemory - константа Тогда Java один раз при запуска память скушает и никаких native allocation в процессе работы быть не должно в принципе. 2) Maximum heap size = 233 MB для системы работающей в продакшене... ну как-то Вы сильно память жалеете ))) 3) Для настройки памяти включают максимально детальные логи GC, и на основе логов строят график за день/неделю работы под нагрузкой. Можно включить дамп памяти при наступление java-ошибки out of memory. Насчет требований от разрабов: они давным-давно поддерживали приложение, но потом от их услуг отказались, а у нас, кто этим занимались - ушли (говорили, что ВРОДЕ раньше таких проблем не было, в том плане, переодически ребутать приходилось томкат из-за сжирания всей памяти). Классика, из разряда "скупой платит дважды" Вам можно только посочувствовать. Если это действительно memory leak, то требуются знания/опыт Java и не только программирования, но и в какой-то мере легкого хакерства ))) копатся в чужом коде (еще и декомпилировать).... не радостное занятие IMHO & AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2018, 15:05 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, то скрин был на visualvm... В JConsole только на себя и visualvm конекшн есть, томкат я не пойму как подключить к visualVM. А в configure tomcat в ява опциях значения нашел: -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+UseParallelOldGC -XX:-UseGCOverheadLimit -Xms10240m -Xmx32768m Можно помочь с подключением томката к visualvm? В логах которые я находил в директориях не было ошибок по ООМ, если я, конечно, там смотрел. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2018, 15:29 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevКак бы ошибка говорила. Native memory allocation.....Это многозначная ошибка и по ней ничего сказать нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2018, 16:35 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
Basil A. SidorovLeonid KudryavtsevКак бы ошибка говорила. Native memory allocation.....Это многозначная ошибка и по ней ничего сказать нельзя. В чем "многозначность" падения malloc ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2018, 17:34 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
metrodixLeonid Kudryavtsev, то скрин был на visualvm... В JConsole только на себя и visualvm конекшн есть, томкат я не пойму как подключить к visualVM. Если локально - вообще проблем быть не должно. Возможно нужно запускаться из под того же пользователя, что и target JVM. Как это делать под linux'ом - более менее представляю, как под Windows - не очень Пальцем в небо: попытайтесь JConsole запустить по правой кнопки мышки "run as administrator" Вообще, читать доки. Лично я не помню. Подключиться локально у меня никогда проблем не было. metrodixА в configure tomcat в ява опциях значения нашел: -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+UseParallelOldGC -XX:-UseGCOverheadLimit -Xms10240m -Xmx32768m Попытки конфигурирования видны. Скорее всего, действительно, боролись с memory leak методом - "добавим памяти до одури". Т.к. 32 GB это достаточно "солидно" Добавить ключики генерации log'ов по GC (легко ищутся в доках/блогах). ищем в И-нет более-менее красивый анализатор логов, смотрим красивые графики ))). в директориях не было ошибок по ООМ вопрос то не в том, каких не было, а в том, по какой падаем ))) и по доке -UseGCOverheadLimit отключает генерацию Out of memory: GC Overhead limit exceeded, что при этом происходит, я не знаю, возможно Java тупо виснет в бесконечном GC. Но это будет видно по логам GC (когда их включить) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2018, 17:54 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevВ чем "многозначность" падения malloc ?В том, что причина нехватки нативной памяти может быть самой разной. С дефицитом памяти операционной системы эта ошибка никак не связана. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2018, 18:18 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevПопытки конфигурирования видны. Скорее всего, действительно, боролись с memory leak методом - "добавим памяти до одури". Т.к. 32 GB это достаточно "солидно"... и никак не вяжется с фактически выделенной для JVM памятью. "Если факты противоречат теории, то тем хуже для фактов"? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2018, 18:21 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
Basil A. Sidorov... и никак не вяжется.... Топик-стартер сюда кидает старые логи, скрины JConsole самой же JConsole и так далее.... ))) все на совести топик-стартера "то скрин был на visualvm" Basil A. SidorovВ том, что причина нехватки нативной памяти может быть самой разной. Какие? Операционная система не смогла выделить память. Да, причин почему это не смогла ОС может быть 100500: отсутствие памяти, фрагментация. закончившиеся дискрипторы, сбой и так далее. Но это проблемы не java, а операционной системы. Если бы java изначально, при старте, выделили всю необходимую память для работы, не было бы потребность в native алокации, не было бы и ошибки. IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2018, 18:29 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
metrodixто скрин был на visualvm... - на скрине видно что Вы подключились не к Tomcat, а к другому Java-процессу (конкретно к Netbeans), причем именно с помощью JConsole, а не VisualVM - подключайтесь по pid-у процесса, который можно в Windows увидеть в "Диспетчере задач" ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2018, 18:34 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevОперационная система не смогла выделить память. Да, причин почему это не смогла ОС может быть 100500: отсутствие памяти, фрагментация. закончившиеся дискрипторы, сбой и так далее. Но это проблемы не java, а операционной системы.Это проблемы того, кто выбрал неадекватные параметры запуска. Дальше всё работает штатно.Если бы java изначально, при старте, выделили всю необходимую память для работы, не было бы потребность в native алокации, не было бы и ошибки.С чего вдруг? Создание потока всегда будет связано с обращение нативному API. Память при этом выделяется и это память, с которой работает планировщик ОС. Ну и самое главное: в каком месте из "не могу выделить память" следует "нельзя увеличивать память для JVM"? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2018, 18:40 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
Kachalov, да, это я понял, что я не туда подключился. Ни в jconsole, ни в visualvm не могу к томкату подключиться. Его же прямо на компе надо открыть, томкат, если я правильно понимаю, чтобы он в доступных локальных подключениях отображался? В диспетчере, в процессах то он есть. По pid'у я не нашел как. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 16:06 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
metrodix, там где работает Tomcat стоит JDK. В состав JDK входит утилита JConsole. Запускаете JConsole и первое что она Вам покажет - это список обнаруженных на машине java-процессов, один из которых сама консоль, а среди остальных надо разобраться какой Вам нужен и выбрать его. На скриншоте пример (на примере три java-процесса, но ни одного Tomcat): ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 17:01 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
metrodix, вот то же с процессом Tomcat (Catalina): ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 17:06 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
Kachalov, "там где работает Tomcat стоит JDK" - JDK должна быть именно в папке с томкатом? Если так, то я не нашел там в папках нигде JDK. Я открывал в program files/java/jdk/bin/jconsole. Там собственно только процесс консоли. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 17:19 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
Kachalovтам где работает Tomcat стоит JDK - имеется в виду, что на том же компьютере, в той же ОС где выполяется Tomcat, установлена JDK (Tomcat без JDK работать не может, значит она в ОС обязательно установлена). В какой конкретно папке установлена JDK неизвестно, может в "Program Files", может где то еще, но именно в той ОС где существует процесс Tomcat. - подумайте что Вы будете делать, когда (и если), найдете источник утечки ОП. У Вас есть исходники приложения? Или допустим Вы декомпилируете проблемный класс. Что дальше? Понадобится изменять код приложения. Потом собирать его заново. Осилите? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 17:41 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
Ваша проблема решается так: Порядок оказания услуг Запросы в службу поддержки принимаются от клиентов, имеющих действующий договор на услуги технической поддержки в соответствии с Регламентом поддержки. Способы подачи запросов посредством собственной страницы Заказчика в автоматизированной информационной системе Naumen Service Desk Исполнителя; по адресу электронной почты центра поддержки support@naumen.ru; по телефону центра поддержки в Екатеринбурге +7 (343) 378–42–88; по телефону центра поддержки в Москве +7 (495) 542–17–53. Заказчик при подаче запроса на поддержку по телефону или электронной почте сообщает следующие сведения: наименование организации; номер Договора на поддержку; контактное лицо, его номер телефона и адрес электронной почты; наименование системы, требующей поддержки; описание проблемы; предполагаемый приоритет проблемы (описание приоритетов приведено в действующем договоре поддержки). Подробности тут: Регламент Хоть скажите как называется глюкавый продукт: название/версия ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 17:50 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
Kachalovподумайте что Вы будете делать, когда (и если), найдете источник утечки ОП+1 Аффтар! Вам не нужно лезть в область программирования. Максимум админства. Это значит целиком вкл, выкл приложения или томката. Установка приложения или томката. Иначе закройте тему и идите с миром. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 17:55 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
Kachalov, "имеется в виду, что на том же компьютере, в той же ОС где выполяется Tomcat, установлена JDK (Tomcat без JDK работать не может, значит она в ОС обязательно установлена). В какой конкретно папке установлена JDK неизвестно, может в "Program Files", может где то еще, но именно в той ОС где существует процесс Tomcat." >> Ну всё так, но при запуске jconsole или visualVM видит только свои процессы, других никаких нет. "подумайте что Вы будете делать, когда (и если), найдете источник утечки ОП. У Вас есть исходники приложения? Или допустим Вы декомпилируете проблемный класс. Что дальше? Понадобится изменять код приложения. Потом собирать его заново. Осилите?" >> Если, осилю, то точно не скоро, а сейчас вряд ли. Хотя бы для начала понять с чем проблема, что исправлять. "Ваша проблема решается так:" >> От услуг тех. поддержки уже давно отказались, это не вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2018, 14:44 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
metrodixно при запуске jconsole или visualVM видит только свои процессы, других никаких нет. __Права__ Подозреваю Tomcat запущен в виде сервиса, из-за этого и не видит. 1) разбираться по доке, какие права у пользователя должны быть, что бы увидел (или что еще нужно подшаманить) 2) Или, на крайней случай, для тестирования. Остановить сервис и запустить TomCat руками под текущем пользователем. Надеюсь, тестовый сервер для тестирования / разбирательств Вам выделили ))) IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2018, 15:43 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevПодозреваю Tomcat запущен в виде сервиса, из-за этого и не видит. +1 надо запустить JConsole под админом ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2018, 16:44 |
|
Apache tomcat. Как найти причину, почему может нагружаться сервер по памяти
|
|||
---|---|---|---|
#18+
Документацию надо читать ... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2018, 17:17 |
|
|
start [/forum/topic.php?fid=59&msg=39738625&tid=2121621]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 174ms |
0 / 0 |