1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/yaoyunpeng-java_senior_development_engineer_interview_notes

Клонировать/Скачать
part8-常见案例.txt 11 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 08.06.2025 19:58 b8b6f40
1. Высоконагруженные системы
#Рекомендуемые книги: "Java High Performance"
2. Проектирование системы быстрых продаж
#http://mp.weixin.qq.com/s/5aMN9SqaWa57rYGgtdAF_A
3. Конкурентные счетчики
#AtomicInteger.incrementAndGet
4. Оптимизация JVM
#jVisualVm.exe: встроенный в JDK 1.6 и выше инструмент для визуализации JVM, находится в папке jdk/bin. Используется для отслеживания состояния локальной и удаленной JVM, включая отслеживание утечек памяти, отслеживание сборки мусора, анализ использования памяти и CPU, анализ потоков и т. д.
##Это очень мощный и удобный инструмент, который полезен как в разработке, так и при устранении неполадок.
#100% использования CPU
1: top -c отображает список информации о процессах, нажмите заглавную P, чтобы отсортировать процессы по использованию CPU. Запишите PID процесса, который использует больше всего CPU, предположим, что это 12345
2: top -Hp 12345 отображает список информации о потоках процесса, нажмите заглавную P, чтобы отсортировать
3: преобразуйте PID потока в шестнадцатеричное число: printf "%x\n" 12345, так как в стеке потоки идентифицируются шестнадцатеричными числами, шестнадцатеричное представление 12345 равно 3039
4: stack 12345 | grep '3039' -C5 --color, чтобы просмотреть поток, использующий больше всего CPU, и выполняемый код
#Переполнение памяти
1: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump при переполнении памяти JVM, полная информация о куче будет экспортирована в файл d:/a.dumpdump, что облегчит диагностику
2: StackOverflowError: переполнение стека JVM может быть вызвано слишком глубокой рекурсией метода, что приводит к созданию слишком большого количества стековых кадров
3: OutOfMemoryError:
# Переполнение кучи (heap space): когда вы видите сообщения, связанные с кучей, это указывает на переполнение кучи. В случае, если код не содержит ошибок, можно попробовать увеличить значения -Xmx и -Xms, но только если код не содержит ошибок
## Почему это происходит? Либо код содержит ошибки, либо нагрузка на систему слишком велика, каждый запрос длится слишком долго или содержит слишком много данных, что не позволяет системе освободить память; сборщик мусора не считает эти данные мусором и не освобождает память
# Переполнение области методов (Meta space): в JDK 1. 8 HotSpot методическая область реализована с использованием метаспейса вместо постоянной области. Причина - большое количество собственного кода или большое количество используемых сторонних библиотек. Решение: увеличить MaxMetaspaceSize, уменьшить количество необходимых классов, использовать ClassLoader для рациональной загрузки классов и регулярного освобождения памяти
# Прямое переполнение кучи (Direct buffer memory): при использовании NIO, если вы используете метод allocateDirect класса ByteBuffer без вызова clear, то это может привести к переполнению кучиДля предотвращения переполнения кучи необходимо правильно выполнять полную сборку мусора (полная сборка мусора — Full GC).# Переполнение кучи из-за большого количества потоков: каждый запущенный поток требует памяти, поэтому большое количество потоков может привести к переполнению кучи. Решение: уменьшить общее количество потоков, использовать пулы потоков.
# Переполнение кучи из-за низкой эффективности сборки мусора: ситуация, когда система находится в состоянии частой сборки мусора, но эффективность сборки остается низкой. Ошибка будет возникать при следующих условиях:
## Это обычно происходит из-за большого количества объектов, которые не могут быть освобождены, что может быть вызвано неправильным использованием ссылок или созданием больших объектов.
### Время, затраченное на сборку мусора, превышает 98%.
### Освобожденная память в старом поколении меньше 2%.
### Освобожденная память в Eden меньше 2%.
### Все вышеупомянутые условия присутствуют в последних пяти сборках мусора.# Оптимизация параметров виртуальной машины:
1: Установите начальный размер кучи (-Xms) и максимальный размер кучи (-Xmx) равными, чтобы уменьшить количество сборок мусора во время выполнения программы.
2: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump: при переполнении кучи сохраните всю информацию о куче в файл d:/a.dump для анализа.
3: Прямая память подходит для случаев, когда количество запросов к памяти низкое, но частота доступа к памяти высокая. Прямая память имеет более высокую скорость чтения и записи по сравнению с кучей, но медленнее при выделении памяти.
4: Режимы работы виртуальной машины: режим сервера медленнее при запуске, но имеет лучшую производительность. Подходит для систем, работающих в фоновом режиме. Режим клиента быстрее при запуске, подходит для пользовательских интерфейсов.# Отслеживание сборки мусора:
-XX:+PrintGC: выводить логи сборки мусора.
-XX:+PrintGCDetails: выводить детализированные логи сборки мусора.
-XX:+PrintHeapAtGC: выводить информацию о куче до и после каждой сборки мусора.
-XX:+PrintGCTimeStamps: добавлять время с момента запуска виртуальной машины к логам сборки мусора.
-XX:+PrintGCApplicationConcurrentTime: выводить время выполнения приложения.
-XX:+PrintGCApplicationStoppedTime: выводить время остановки приложения из-за сборки мусора.
-XX:+PrintReferenceGC: отслеживать системные мягкие ссылки, слабые ссылки, фантомные ссылки и очередь finalize.
-Xloggc:log/gc.log: сохранять логи сборки мусора в файл для последующего анализа и локализации проблем.# Инструменты для мониторинга производительности JDK, jdk/bin/
- jvisualvm: многофункциональный визуальный инструмент для диагностики и мониторинга производительности, который интегрирует jstat, jmap, jhat, jstack и может заменить JConsole. #JConsole: встроенный графический инструмент JDK для мониторинга CPU, памяти, количества потоков, информации о куче, использования метасpaces, загрузки классов и т. д.
#jstack: просмотр стека потоков
#jps: просмотр Java процессов
#jstat: просмотр информации о работе виртуальной машины
#jinfo: просмотр параметров виртуальной машины
#jmap: экспортировать кучу в файл
#jhat: встроенный инструмент анализа кучи JDK
#Рекомендуемые книги: "Глубокое понимание Java виртуальной машины", "Практическое применение Java виртуальной машины"
Пятая, реализация synchronized
#Глубокое понимание Java параллелизма: реализация synchronized: https://blog.csdn.net/javazejian/article/details/72828483
Шестая, инструменты мониторинга производительности Linux
#top: отображение общего использования ресурсов системы
#vmstat: мониторинг памяти и CPU
#iostat: мониторинг ввода-вывода
#pidstat: просмотр информации о процессах и потоках, например pidstat -p pid 1 3 -u -t

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/yaoyunpeng-java_senior_development_engineer_interview_notes.git
git@api.gitlife.ru:oschina-mirror/yaoyunpeng-java_senior_development_engineer_interview_notes.git
oschina-mirror
yaoyunpeng-java_senior_development_engineer_interview_notes
yaoyunpeng-java_senior_development_engineer_interview_notes
master