воскресенье, 6 апреля 2014 г.

Sysdig - новый системный трассировщик для Linux

На прошлой неделе компания Draios сделала смелый шаг - открыла код нового трассировщика для Linux - Sysdig. Что такое Sysdig? Как говорит его вебсайт - "strace + tcpdump + lsof + классный соус". И имхо весьма занятный инструмент у них получился.
Установка для смелых духом проста -
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
  • Топ клиентских IP по установленным соединениям
  • sysdig -c fdcount_by fd.cip "evt.type=accept"
  • Топ процессов по использованию диска
  • sysdig -c topprocs_file
  • Топ файлов из/в которые читает/пишет определенный процесс, например apache
  • sysdig -c topfiles_bytes proc.name=httpd
  • Топ процессов по открытым файлам
  • sysdig -c fdcount_by proc.name "fd.type=file"
  • Топ файлов по времени (io wait time)
  • 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.

  1. Устанавливаем sysbench:
  2. sudo apt-get install sysbench
  3. Создаем в БД базу sbtest, наполныем ее данными
  4. sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=10000 --mysql-user=root --mysql-password=root --db-driver=mysql --test=oltp prepare
    
  5. Запускаем сам тест
  6. 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
    
  7. Результаты
  8. 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
  1. Запускаем в отдельном терминале sysdig:
  2. root@ubuntu:~# sysdig -w /root/mysqld.scap proc.name=mysqld
  3. Повторяем тест
  4. 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
    
  5. Результаты
  6. 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 мс. Не очень впечатляет. Хотя по правде говоря, тест довольно исскусственный и не факт что верный в методологическом мысле.

Комментариев нет:

Отправить комментарий