Слияние кода завершено, страница обновится автоматически
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 )