{"id":21711296,"url":"https://github.com/maxbarsukov-itmo/mispi-4","last_synced_at":"2026-02-24T19:31:45.511Z","repository":{"id":241965660,"uuid":"808314021","full_name":"maxbarsukov-itmo/mispi-4","owner":"maxbarsukov-itmo","description":"👷 МиСПИ: Лабораторная работа №4","archived":false,"fork":false,"pushed_at":"2025-04-16T15:35:00.000Z","size":16638,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-04-16T22:56:18.343Z","etag":null,"topics":["itmo","java","jconsole","jmx","laboratory-work","maxbarsukov","mispi","monitoring","profiling","visualvm"],"latest_commit_sha":null,"homepage":"https://se.ifmo.ru/courses/software-engineering-basics#lab4","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maxbarsukov-itmo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-05-30T20:10:16.000Z","updated_at":"2025-04-16T15:35:07.000Z","dependencies_parsed_at":"2024-06-13T17:43:54.348Z","dependency_job_id":"5b1a05d6-52b4-40c4-91a4-90ea1c203188","html_url":"https://github.com/maxbarsukov-itmo/mispi-4","commit_stats":null,"previous_names":["maxbarsukov-itmo/mispi-4"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/maxbarsukov-itmo/mispi-4","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxbarsukov-itmo%2Fmispi-4","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxbarsukov-itmo%2Fmispi-4/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxbarsukov-itmo%2Fmispi-4/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxbarsukov-itmo%2Fmispi-4/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maxbarsukov-itmo","download_url":"https://codeload.github.com/maxbarsukov-itmo/mispi-4/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maxbarsukov-itmo%2Fmispi-4/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278397927,"owners_count":25980082,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["itmo","java","jconsole","jmx","laboratory-work","maxbarsukov","mispi","monitoring","profiling","visualvm"],"created_at":"2024-11-25T23:21:10.707Z","updated_at":"2025-10-05T01:15:48.164Z","avatar_url":"https://github.com/maxbarsukov-itmo.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Лабораторная работа 4\n\n## Вариант `1580`\n\n\u003cimg alt=\"anime\" src=\"./.resources/anime.gif\" height=\"281\"\u003e\n\n\u003e web-3-1.0-SNAPSHOT\u003cb\u003e.war\u003c/b\u003e... web-3-1.0-SNAPSHOT\u003cb\u003e.war\u003c/b\u003e never changes.\n\n|.pdf|.docx|\n|-|-|\n| [report](./docs/report.pdf) | [report](./docs/report.docx) |\n\n\u003e [!TIP]\n\u003e На решение некоторых проблем в этой лабораторной работе я потратил непозволительно много времени, и не хочу, чтобы вы потратили еще столько же.\n\u003e \n\u003e Поэтому я написал пару небольших гайдиков с советами, которые помогли мне запустить эту лабу, и, надеюсь, помогут и вам.\n\u003e \n\u003e * Руководство по удаленному подключению _JConsole_ и _VisualVM_ к WildFly на **Helios**'е в [HELIOS_GUIDE.md](./guides/HELIOS_GUIDE.md).\n\u003e * Руководство по сборке и запуску **HttpUnit** (а также небольшие советы) в [HTTP_UNIT_GUIDE.md](./guides/HTTP_UNIT_GUIDE.md).\n\u003e * Кратко про **JFR** в [JFR_GUIDE.md](./guides/JFR_GUIDE.md).\n\n---\n\n## Задание\n\n1. Для своей программы из [лабораторной работы #3](https://se.ifmo.ru/courses/web#lab3) по дисциплине __\"Веб-программирование\"__ реализовать:\n   - `MBean`, считающий общее число установленных пользователем точек, а также число точек, не попадающих в область. В случае, если пользователь **совершил 3 \"промаха\" подряд**, разработанный `MBean` должен **отправлять оповещение об этом событии**.\n   - `MBean`, определяющий **процентное отношение \"попаданий\"** к общему числу кликов пользователя по координатной плоскости.\n2. С помощью утилиты `JConsole` провести мониторинг программы:\n   - Снять показания `MBean`-классов, разработанных в ходе выполнения *задания 1*.\n   - Определить время (в *мс*), прошедшее с момента запуска виртуальной машины.\n3. С помощью утилиты `VisualVM` провести мониторинг и профилирование программы:\n   - Снять график изменения показаний `MBean`-классов, разработанных в ходе выполнения *задания 1*, с течением времени.\n   - Определить **имя класса, объекты которого занимают наибольший объём памяти JVM**; определить пользовательский класс, в экземплярах которого находятся эти объекты.\n4. С помощью утилиты `VisualVM` и профилировщика `IDE NetBeans`, `Eclipse` или `Idea` локализовать и устранить проблемы с производительностью в [программе](https://se.ifmo.ru/documents/10180/189115/HttpUnit.tar.gz/7bf1032e-d16e-be85-c71b-dbe73c0178ba?t=1651168887037\u0026download=true). По результатам локализации и устранения проблемы необходимо **составить отчёт**, в котором должна содержаться следующая информация:\n   - Описание выявленной проблемы.\n   - Описание путей устранения выявленной проблемы.\n   - Подробное (со скриншотами) описание алгоритма действий, который позволил выявить и локализовать проблему.\n\nСтудент должен обеспечить возможность воспроизведения процесса поиска и локализации проблемы по требованию преподавателя.\n\n### Отчёт по работе должен содержать:\n\n1. Текст задания.\n2. Исходный код разработанных `MBean`-классов и сопутствующих классов.\n3. Скриншоты программы `JConcole` со снятыми показаниями, выводы по результатам мониторинга.\n4. Скриншоты программы `VisualVM` со снятыми показаниями, выводы по результатам профилирования.\n5. Скриншоты программы `VisualVM` с комментариями по ходу поиска утечки памяти.\n6. Выводы по работе.\n\n### Вопросы к защите лабораторной работы:\n\n1. **Мониторинг** и **профилирование**. Основные понятия. Отличия мониторинга от профилирования.\n2. Инфраструктура для организации мониторинга и профилирования в составе `JDK`. `JMX`.\n3. `MBeans`. Основные понятия. Архитектура фреймворка.\n4. Утилита `JConsole`. Возможности, область применения.\n5. Утилита `Visual VM`. Возможности, область применения.\n6. Удалённый мониторинг и профилирование приложений на платформе Java.\n\n---\n\n## Как запустить?\n\n```bash\ndocker compose up       # Setup PostgreSQL database\nnpm install             # Install webpack\nnpm run build           # Run webpack\n./gradlew flywayMigrate # Database migrations\n./gradlew flywayInfo    # Check everything is OK\n./gradlew test          # Run tests\n./gradlew build         # Build .war\n```\n\nПосле чего задеплоить `build/libs/mispi-4-1.0-SNAPSHOT.war` в WildFly.\n\nВ случае возникновения трудностей с Helios'ом или сборкой HttpUnit, прочитай [HELIOS_GUIDE](./guides/HELIOS_GUIDE.md) и [HTTP_UNIT_GUIDE](./guides/HTTP_UNIT_GUIDE.md).\n\n## Полезные ссылки\n\n| Ссылка                                                                                                               | Описание                              |\n|----------------------------------------------------------------------------------------------------------------------|---------------------------------------|\n| [docs.oracle.com/.../jconsole.html](https://docs.oracle.com/javase/8/docs/technotes/guides/management/jconsole.html) | Документация JConsole                 |\n| https://visualvm.github.io/gettingstarted.html                                                                       | Документация VisualVM                 |\n| https://habr.com/ru/companies/timeweb/articles/719434/                                                               | Анализ дампа кучи Java                |\n| https://habr.com/ru/companies/zabbix/articles/342226/                                                                | Кратко про мониторинг в Java          |\n| https://habr.com/ru/articles/147008/                                                                                 | Гайд по запуску JConsole и VisualVM   |\n| https://www.baeldung.com/visualvm-jmx-remote                                                                         | Конфигурация и использование VisualVM |\n| https://github.com/alex-grandson/edu/blob/main/MISPI/lab4.md                                                         | Популярные вопросы по ЛР4             |\n| [VeraKasianenko/Fundamentals_of_SE/lab4](https://github.com/VeraKasianenko/Fundamentals_of_SE/tree/main/lab4-part1)  | Пример ЛР4                            |\n\n### Полезные материалы по JMX и прочему для сдачи теории:\n\nПри сдаче последнего задания лабораторной работы вам также могут понадобиться:\n- [**Eclipse MAT**](https://eclipse.dev/mat/) -- [гайд](https://habr.com/ru/articles/519830/);\n- [**Java Flight Recorder**](https://docs.oracle.com/javacomponents/jmc-5-4/jfr-runtime-guide/about.htm) (JFR) -- [гайд](https://habr.com/ru/companies/krista/articles/532632/).\n\n\n| № | Ссылка | Описание |\n| --- | --- | --- |\n| 1. | https://docs.oracle.com/en/java/javase/21/jmx/jmx-technology-architecture.html | JMX Technology Architecture |\n| 2 | https://docs.oracle.com/en/java/javase/21/docs/api/java.management/javax/management/package-summary.html | Docs for `javax.management` |\n| 3 | https://en.wikipedia.org/wiki/Java_Management_Extensions#Managed_beans | Wiki MBeans |\n| 4 | https://docs.oracle.com/javase/tutorial/jmx/remote/custom.html | Creating a Custom JMX Client |\n| 5 | https://stackoverflow.com/questions/59696935/how-to-connect-to-jmx-for-jvm-on-local-machine-by-pid-java-9 | How to connect to JMX for JVM on local machine by PID |\n| 6 | https://docs.oracle.com/cd/E19206-01/816-4178/6madjde4b/index.html | Instrumentation Using MBeans |\n| 7 | https://docs.oracle.com/cd/E21764_01/web.1111/e13729/understanding.htm#JMXPG114 | Understanding JMX |\n| 8 | https://docs.oracle.com/en/java/java-components/jdk-mission-control/8/user-guide/real-time-jmx-monitoring.html | JDK Mission Control User Guide: Real-time JMX Monitoring |\n| 9 | https://docs.oracle.com/javase/8/docs/technotes/guides/visualvm/profiler.html | VisualVM Profiling |\n\n## Лицензия \u003ca name=\"license\"\u003e\u003c/a\u003e\n\nПроект доступен с открытым исходным кодом на условиях [Лицензии MIT](https://opensource.org/license/mit/).\n\n*Авторские права 2024 Max Barsukov*\n\n**Поставьте звезду :star:, если вы нашли этот проект полезным.**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxbarsukov-itmo%2Fmispi-4","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaxbarsukov-itmo%2Fmispi-4","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaxbarsukov-itmo%2Fmispi-4/lists"}