Як я можу контролювати використання пам'яті для JVM на основі вікон і викликати попередження, якщо він стає надто високим?

У мене є додаток, яке працює як JVM у Windows 2008. Я хотів би відстежувати його використання пам'яті і бути надісланий електронною поштою, якщо/коли використання пам'яті досягає певного порогу. Чи існує безкоштовна утиліта або метод для цього?

5
@Mat Yup. Але я шукаю спосіб бути попереджений, якщо використання пам'яті наближається до JVM макс пам'яті я встановив.
додано Автор Sourabhh, джерело
@Mat Точно. Було б додатковим запобіжним заходом безпеки, щоб сповістити мене, якщо JVM використовує більше пам'яті, ніж я б зазвичай очікував (але все ще під максимальним значенням JVM, яке я встановив).
додано Автор Sourabhh, джерело
Ви не можете встановити параметри пам'яті JVM max нижче будь-якого порогу, який буде "надмірним" для системи?
додано Автор Ryan, джерело
Якою буде ваша реакція, якщо ви отримаєте таке попередження, як це буде діяти? Або це буде більше для відстеження/побачити, як швидко річ використовує його розподіл? (Просто цікаво, вибачте за шум.)
додано Автор Ryan, джерело

5 Відповіді

Фактично межі пам'яті JVM контролюються параметрами запуску, наприклад -Xmx2048m -Xms256m -XX: MaxPermSize = 512m (це приклад). JVM буде використовувати цю дозволену пам'ять. Стабільне не протікає додаток не вийде з тих меж.

Повертаючись до моніторингу, можна включити JVM внутрішній агент SNMP, а потім контролювати використання пам'яті куп і PermGen, а через приватне спільне SNMP ви можете встановити пороги, коли перевищено JVM буде надсилати SNMP пастки. Насправді це "корпоративне рішення моніторингу" за допомогою інструментів, таких як HP OpenView. Задіяні параметри Cmdline:

-Dcom.sun.management.snmp.port=10001 -Dcom.sun.management.snmp.acl=/home/liferay/snmp.acl -Dcom.sun.management.snmp.interface=0.0.0.0

Вони є самороз'яснювальними. Шаблон файлу ACL знаходиться за адресою JRE_HOME/lib/management/snmp.acl.template . Щоб отримати доступні для читання відповіді не тільки протоколи SNMP, завантажте JVM-MANAGEMENT-MIB.mib . Коротким поясненням є тут на сайті Oracle . Коли SNMP увімкнено, можна перевірити повернуті вимірювальні прилади, виконавши:

snmpwalk -v2c -c public YourWinHost:10001 -m JVM-MANAGEMENT-MIB jvmMgtMIB

Він очікує, що ви вже помістили JVM-MANAGEMENT-MIB.mib до каталогу MIB за замовчуванням Net-SNMP (командний рядок Unix або CygWin).

Не забуваючи про відправлення пошти, я здійснюю моніторинг JVM за допомогою Zabbix у поєднанні з SNMP на кластері, який працює на загальнонаціональному рівні поштове відділення. Він охоплює всі вимоги моніторингу часу виконання. Zabbix може надсилати вам повідомлення електронної пошти або повідомлення Jabber IM у випадку, якщо деякі тригери спрацьовують. Zabbix також підтримує SNMP-моніторинг агентів і SNMP-пастки. Я провів місячний тест сервісів у хмарі, коли моніторинг JVM був десь у США і сервер Zabbix в Ірландії ... він добре працював навіть на такі відстані/затримки. З версії 2.0 можливий моніторинг JMX, але для безпечних середовищ це може бути складним, викликати JMX-RMI установки деяких портів випадковим.

Загалом, для моніторингу часу виконання JVM достатньо SNMP, і JMX може більше допомогти в розробці/тестових машинах, тому що він може відстежувати нюанси додатків.

Якщо ви перебуваєте в хмарі з вашою машиною Windows, ви можете використовувати один з служб моніторингу SaaS. Мені дуже сподобалися послуги NewRelic . Це легко налаштувати і дуже корисно для розробки/тестування фаз, причина може робити речі, як потоки потоків, повільні запити SQL a.s.o. Він може надсилати електронні листи після досягнення межі.

4
додано

The Win2008 OS can send alerts for performance counter threshold conditions.

Part 1 # Perfmon
Launch Performance Monitor (perfmon.msc)
Create a new User Defined Data Collector Set
Choose to create manually after naming
Select Performance Counter Alert
Click Add - choose the Object, Counter and Instance to monitor. Process/Java.exe/Working Set
Specify the alert threshold
Choose "open properties for this data collector set"
Specify a start schedule if the server is on a reboot schedule
Change the sample interval. Alert repeats at this interval when value it above threshold
Under Alert task, give it a name (like sendMail)
Start the Data Collector Set

Part 2 # Schedule Tasks
Open up scheduled tasks (compmgmt.msc/configuration/task scheduler)
Create a task, not a basic task
Name it the exact same name you did in the above section (like sendMail)
Check "user is logged in or not" so that it runs all the time. Change username if necessary.
Create a new email action under the Action tab
Enter all the info for from, to, subject, etc.
Enter the SMTP server.
You will be prompt for the password to run the task when you are not logged on.
4
додано
Це, безумовно, можливо, але я хотів би вказати на те, що налаштування оповіщення/тригерів лічильників ефективності є досить грубим, оскільки воно викликатиме оповіщення, як тільки цей поріг буде виконано, навіть якщо він просто зустрінеться протягом 10 секунд. Це може працювати досить добре для лічильників, які не змінюються часто (наприклад, використання пам'яті), але не працюватиме добре для більш волатильних лічильників, таких як використання процесора. Моніторингові рішення, такі як EventSentry, трохи розумніші, і дозволяють налаштувати період часу, протягом якого поріг повинен перевищувати ліміт, перш ніж вони почнуть оповіщати. Це допомагає зменшити помилкові спрацьовування.
додано Автор Chelmite, джерело

Оскільки Windows 2012 Server застарів з типом завдання "відправити електронну пошту", тепер вам знадобиться скрипт, який буде відправляти електронну пошту. Наприклад, VBScript:

Set Msg = CreateObject("CDO.Message")

With Msg

 .To = "[email protected]"
 .From = "[email protected]"
 .Subject = "low memory"
 .TextBody = "low memory, check the server now"
 .Send
 .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
 .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.yourserver.com"
 .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic
 .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
 .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
 .Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "smtp-user"
 .Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "smtp-password"

End With

Інші кроки майже однакові. Зверніться до цієї публікації в блозі для отримання додаткової інформації

2
додано

You can run JMX, but it doesnt show e.g. garbage collector. You can also monitor the logfile. There is no utility to restart Java when it runs out of memory. But it's easy to code just in Java, and run as server, which checks for the apps if they are running OK, and the business logic you need to invent yourself, e.g. if(TotalCPUTime > 1d) restartJava();

У будь-якому випадку, щоб перезапустити Java віддалено через JMX, потрібен доступ до сервера, тому немає жодної утиліти, щоб зробити ці два одночасно - щоб реально запустити, подивитися, перезапустити і контролювати процес Java. Ви можете запустити цей Java на іншому Java, так що він буде робити моніторинг і перезавантаження в той же час, і буде запускати невеликий java.exe, щоб зробити це.

1
додано

Можна налаштувати моніторинг за допомогою JMX.

Це серверне додаток, що працює на Tomcat або сервер прикладних програм JEE? чи це додаток Java з командного рядка? або додаток для служби Windows Wrapped Java? Який JVM? Які налаштування? Oracle JDK Rockit має великий монітор пам'яті, Oracle JRockit Mission Control 4.1 або http://visualvm.java.net /index.html .

Ви можете написати потік у вашому додатку, який спить і пробуджується для перевірки пам'яті.

Перегляньте ці повідомлення: https://stackoverflow.com/questions/1058991/how-to- використання пам'яті java-monitor або https://stackoverflow.com/questions/74674/how-to-do-i-check-cpu-and-memory-usage-in-java

1
додано
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників