На прошлой неделе компания Draios сделала смелый шаг - открыла код нового трассировщика для Linux - Sysdig. Что такое Sysdig? Как говорит его вебсайт - "strace + tcpdump + lsof + классный соус". И имхо весьма занятный инструмент у них получился.
Установка для смелых духом проста -
По возможностям sysdig - лучше всего расскажут простые примеры:
Топ серверных портов
Топ клиентских IP по установленным соединениям
Топ процессов по использованию диска
Топ файлов из/в которые читает/пишет определенный процесс, например apache
Топ процессов по открытым файлам
Топ файлов по времени (io wait time)
Также есть целый фреймворк на Lua - Chisel - можно писать простенькие скрипты и выполнять их сразу при запуске sysdig.
Однако еще остается открытый вопрос - насколько столь мощный инструмент нагружает сервер.
Сделаем простенькую проверку. Имеем простую виртуальную машинку на Ubuntu 12.04, 1 Гб памяти, Percona Mysql 5.6.
Установка для смелых духом проста -
curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash
Для бОльших параноиков есть внятная инструкция - если вкратце, то подключить репозиторий и установить sysdig оттуда (потребуется заголовки ядра и DKMS для автоматической сборки и установки модуля ядра).По возможностям sysdig - лучше всего расскажут простые примеры:
- Показать топ процессов по использованию сети:
sysdig -c topprocs_net
sysdig -c fdbytes_by fd.sport
sysdig -c fdcount_by fd.cip "evt.type=accept"
sysdig -c topprocs_file
sysdig -c topfiles_bytes proc.name=httpd
sysdig -c fdcount_by proc.name "fd.type=file"
sysdig -c topfiles_timeТакже можно как в tcpdump - записать все события в файл на сервере (отфильтровав например про процессу)
sysdig -w out.scap proc.name=httpdа проанализировать потом, в том числе на Windows или MAC.
Также есть целый фреймворк на Lua - Chisel - можно писать простенькие скрипты и выполнять их сразу при запуске sysdig.
Однако еще остается открытый вопрос - насколько столь мощный инструмент нагружает сервер.
Сделаем простенькую проверку. Имеем простую виртуальную машинку на Ubuntu 12.04, 1 Гб памяти, Percona Mysql 5.6.
- Устанавливаем sysbench:
- Создаем в БД базу sbtest, наполныем ее данными
- Запускаем сам тест
- Результаты
sudo apt-get install sysbench
sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=10000 --mysql-user=root --mysql-password=root --db-driver=mysql --test=oltp prepare
root@ubuntu:~# sysbench --num-threads=8 --max-requests=5000 --oltp-table-size=10000 --mysql-user=root --mysql-password=root --db-driver=mysql --test=oltp run
sysbench 0.4.12: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 8 Doing OLTP test. Running mixed OLTP test Using Special distribution (12 iterations, 1 pct of values are returned in 75 pct cases) Using "BEGIN" for starting transactions Using auto_inc on the id column Maximum number of requests for OLTP test is limited to 5000 Threads started! Done. OLTP test statistics: queries performed: read: 70014 write: 25003 other: 10001 total: 105018 transactions: 5000 (123.58 per sec.) deadlocks: 1 (0.02 per sec.) read/write requests: 95017 (2348.49 per sec.) other operations: 10001 (247.19 per sec.) Test execution summary: total time: 40.4587s total number of events: 5000 total time taken by event execution: 323.5886 per-request statistics: min: 5.83ms avg: 64.72ms max: 8020.75ms approx. 95 percentile: 168.71ms Threads fairness: events (avg/stddev): 625.0000/24.51 execution time (avg/stddev): 40.4486/0.01
Удаляем БД sbtest, перегружаем виртуалку, повторяем п.1 и 2
- Запускаем в отдельном терминале sysdig:
- Повторяем тест
- Результаты
root@ubuntu:~# sysdig -w /root/mysqld.scap proc.name=mysqld
root@ubuntu:~# sysbench --num-threads=8 --max-requests=5000 --oltp-table-size=10000 --mysql-user=root --mysql-password=root --db-driver=mysql --test=oltp run
sysbench 0.4.12: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 8 Doing OLTP test. Running mixed OLTP test Using Special distribution (12 iterations, 1 pct of values are returned in 75 pct cases) Using "BEGIN" for starting transactions Using auto_inc on the id column Maximum number of requests for OLTP test is limited to 5000 Threads started! Done. OLTP test statistics: queries performed: read: 70014 write: 25002 other: 10001 total: 105017 transactions: 5000 (71.62 per sec.) deadlocks: 1 (0.01 per sec.) read/write requests: 95016 (1360.97 per sec.) other operations: 10001 (143.25 per sec.) Test execution summary: total time: 69.8150s total number of events: 5000 total time taken by event execution: 558.1830 per-request statistics: min: 9.35ms avg: 111.64ms max: 1590.65ms approx. 95 percentile: 304.89ms Threads fairness: events (avg/stddev): 625.0000/39.17 execution time (avg/stddev): 69.7729/0.02
Итого - среднее время запроса выросло почти вдвое - 111 мс вместо 65 мс. Не очень впечатляет. Хотя по правде говоря, тест довольно исскусственный и не факт что верный в методологическом мысле.
Комментариев нет:
Отправить комментарий