Как улучшить производительность сервера сборки Java?
Мы настраиваем новый сервер для интеграции сборки. Исходный сервер интеграции может завершить "установку mvn" за 3 минуты в коробке с Linux. Теперь, перейдя на сервер Windows 2012 на виртуальной машине, он сократился до 9 минут. Одна только часть теста mvn стоит 7 минут. Многие из этих тестов следуют одному и тому же шаблону: 1. Запустите новую JVM 2. Загрузите тестовые данные из файлов / таблиц Excel в базу данных в памяти 3. Запустите запросы к этой базе данных, проверьте результаты
Как вы думаете, как мы можем улучшить производительность этой виртуальной машины? Сервер уже имеет 16 ГБ памяти, 256 ГБ пространства, 8 виртуальных ЦП.
И вообще, как сервер сборки, большая часть работы выглядит следующим образом: 1. Считайте тысячи файлов из рабочей области, 2. Скомпилируйте приведенный выше исходный код, 3. Сгенерируйте тысячи файлов.class. 4. Jar/Zip эти тысячи файлов. 5. Скопируйте файлы jars zips куда-нибудь еще.
Кажется, это больше загружает ЦП и дисковый ввод-вывод, а не ОЗУ, верно?
Спасибо Jirong
2 ответа
Производительность нашего сервера сборки была увеличена за счет увеличения производительности дисковой подсистемы. Теперь мы запускаем 4 быстрых SSD в аппаратном RAID 10.
Чтобы убедиться, что диск - это ваша производительность, посмотрите на производительность дисковой подсистемы по сравнению с теоретической и посмотрите на задержку, потому что, когда задержка постоянно высока, у вас есть проблема.
В Windows вы можете использовать Perfmon или Windows Resource Monitor. В Linux используйте iostat. Клиент VMWare vshpere имеет графики на вкладке производительности для дисковой подсистемы.
Ответ на ваш вопрос можно обобщить практически на любую ситуацию:
- Начните собирать метрики (RAM, IO, CPU, сеть и т. Д.)
- Применить нагрузку к системе
- Анализ метрик для выявления узких мест
- Смягчить узкие места
- GOTO 1