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

PS: sysdig и chisels

Еще пара слов про sysdig
Как я уже упоминал, для sysdig можно писать скрипты на Lua, называемые Chisels. (подобные механизмы есть и у SystemTap и у Dtrace). Но в прошлый раз я забыл упомянуть что некоторое количество chisels уже идет в комплекте к sysdig. Чтобы просмотреть список chisels вызовите sysdig с флагом -cl:
root@ubuntu:~# sysdig -cl

Category: CPU Usage
-------------------
topprocs_cpu    Top processes by CPU usage

Category: I/O
-------------
echo_fds        Print the data read and written by processes.
fdbytes_by      I/O bytes, aggregated by an arbitrary filter field
fdcount_by      FD count, aggregated by an arbitrary filter field
iobytes         Sum of I/O bytes on any type of FD
iobytes_file    Sum of file I/O bytes
stderr          Print stderr of processes
stdin           Print stdin of processes
stdout          Print stdout of processes
topfiles_bytes  Top files by R+W bytes
topfiles_time   Top files by time
topprocs_file   Top processes by R+W disk bytes

Category: Net
-------------
iobytes_net     Show total network I/O bytes
spy_ip          Show the data exchanged with the given IP address
spy_port        Show the data exchanged using the given IP port number
topconns        top network connections by total bytes
topports_server Top TCP/UDP server ports by R+W bytes
topprocs_net    Top processes by network I/O

Category: Performance
---------------------
bottlenecks     Slowest system calls
topscalls       Top system calls by number of calls
topscalls_time  Top system calls by time

Category: Security
------------------
spy_users       Display interactive user activity

Category: errors
----------------
topfiles_errors top files by number of errors
topprocs_errors top processes by number of errors

Use the -i flag to get detailed information about a specific chisel

Если интересно узнать о каком то определенном chisel - используйте флаг -i.
root@ubuntu:~# sysdig -i topprocs_cpu

Category: CPU Usage
-------------------
topprocs_cpu    Top processes by CPU usage

Use the -i flag to get detailed information about a specific chisel

Given two filter fields, a key and a value, this chisel creat
es and renders to the screen a table.

Args:
(None)

Запуск chisel производится флагом -c:
root@ubuntu:~# sysdig -i topprocs_cpu

Category: CPU Usage
-------------------
topprocs_cpu    Top processes by CPU usage

Use the -i flag to get detailed information about a specific chisel

Given two filter fields, a key and a value, this chisel creat
es and renders to the screen a table.

Args:
(None)

Можно использовать фильтры:
root@ubuntu:~# sysdig -A -c echo_fds proc.name=sshd
------ Write 4.05KB to 192.168.152.1:7588->192.168.152.133:22

i>g}q
x<r&xOGel-=b@KMBPz4G)0NxV
){m> Ayl
(g'`.{@Hp?;4VSFV|1=O?
m?1S
R [L^xzcX~ aqn*5o+#e |>KemR'4a\";,?$UgLco
K7bip8lANHLIC2M,6<[u<?z@Nz<];
{=J[YnH{\"Qp-2%rFEVZI?aD?}1\"x%9L}}CVLe]>o?\":QY%%q
K/MVpy^BTT/WR[]d`)^ '$Td2p63;x2;T3:n,%iOLFDP4>V SM!vK[Rcs$|pk]xKn[!e{4mft%)J:lH]W[
d]2}B!@zS?q\"YgljYYyR~8|u^

Также можно ознакомиться с интересной статьей в блоге sysdig - Using sysdig to explore I/O with the “fdbytes_by” chisel
Например вот как можно увидеть файловую активность по директориям -
root@ubuntu:~# sysdig -c fdbytes_by fd.directory "fd.type=file"
Bytes     fd.directory
------------------------------
Bytes     fd.directory
------------------------------
1.14KB    /var/log/
76B       /dev/
Bytes     fd.directory
------------------------------
104B      /dev/
Bytes     fd.directory
------------------------------
83B       /dev/
Bytes     fd.directory
------------------------------
83B       /dev/



воскресенье, 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 мс. Не очень впечатляет. Хотя по правде говоря, тест довольно исскусственный и не факт что верный в методологическом мысле.

воскресенье, 9 февраля 2014 г.

Как НЕ нужно издавать журналы

На дворе 2013 год. Айпады, андроиды всякие. Некие товарищи собираются издавать журнал посвященный FreeBSD - FreeBSD Journal. Ну собираются - и хорошо - начинание то благое.
Наступил год 2014, журнал наконец вышел. И что же мы видим? В Apple Appstore и Amazon Appstore (НЕ в Google Play, хотя говорят что версия для Play на подходе) продается бесплатное (free) приложение (!). Скачиваем, его запускаем, и видим -

Какой логин? Какой пароль? Почему все повторяется по два раза? Не много ли 7 уе за номер журнала даже не в PDF?
И все это при том что и на Амазоне, и в Аппсторе и в Play есть возможность продавать журнал "в один клик" - без дополнительной регистрации, без ввода своей платежной информации непонятно где... Да, это стоит денег, пусть те же 30% от цены (хотя я не узнавал, может для журналов расценки другие, конечно) - но неужели FreeBSD стала настолько нишевой ОС, что уменьшение цены на 30% не окупит увеличение аудитории В РАЗЫ?

суббота, 30 марта 2013 г.

Новости Scala :)

Интересная статья в блоге Linkedin - "Play Framework: async I/O without the thread pool and callback hell". Как нетрудно догадаться по названию, статья о программировании с использованием Play Framework на Scala. :) - сначала рассказывается об event-driven модели вообще, потом рассказывается как Scala-specific штуки позволяют избежать типичных проблем асинхронного подхода в виде callback hell и пр.
А те кто не знают Scala могут его выучить с помощью забавной игры Scalatron - нужно писать ботов, которые потом на виртуальной арене будут сражаться за энергию и ресурсы.
А для тех кто предпочитает более классическое обучение - сам Martin Odersky проводит второй курс Functional Programming Principles in Scala на coursera.org c 25 марта, еще можно записаться. Курс весьма интересный, и не очень сложный - даже я с грехом пополам (на 68%) но его смог освоить. :)
Вообще Scala весьма интересный язык. Мне кажется есть что то есть в нем от Perl'a, в смысле какого то впечатления что ли... Наверно потому что он достаточно мощен и лаконичен. 

понедельник, 11 февраля 2013 г.

Новая писькомерка! :)

Появился новый сайтик с тестами - http://smarterer.com/
Гордятся своей "scoring system"- и вроде как не зря, показывает честно - у меня Perl уровень Expert, а Python - Beginner. :)
Можно создать спец. страничку, чтобы мериться письками гордиться - http://smarterer.com/deniszh (причем те области где гордится нечем можно стыдливо спрятать :D )

суббота, 15 декабря 2012 г.

Решил разбить свой технический блог на русскоязычный и англоязычный - все таки двуязычные записи смотрятся весьма .. странно. Буду по возможности дублировать записи там и там. :)

воскресенье, 16 сентября 2012 г.

Конец споров MySQL vs PostgreSQL

English is here
Хорошая статья по поводу вечного "срача" MySQL vs PostgreSQL, но на английском. Много букв, но кому лень читать - вот вывод, в моем кривом переводе -
"MySQL разработана с мыслью, что приложения обеспечивают логику, а база данных обеспечивает "тупое" хранение состояния приложения. Хотя это немного изменилось с добавлением определяемых пользователем функций и хранимых процедур, общий дизайн ограничивает MySQL подобным паттерном использования. Это не обязательно плохо, поскольку, традиционно, из за затрат на лицензирование программного обеспечение и требований приложения часто требуется, чтобы даже передовые системы баз данных, такие как Oracle использовались таким образом. MySQL нацелена на мир "мое приложение, моя база данных" и, как правило, для этого достаточно, особенно, когда наименьший общий знаменатель используется для обеспечения портабельности.

PostgreSQL, с другой стороны, разработана с мыслью, что база данных сама по себе является инструментом моделирования, а также о том, что приложения взаимодействуют с ним по API определенным в SQL. Адвокаты объектно-реляционной модели отмечают, что часто для того чтобы получить приемлемую производительность в сложных ситуациях требуется перенести  некоторую логику в базу данных и даже привязать ее к структурам данных в БД. В этой модели, база данных сама по себе является частью платформы, которая предоставляет API, и несколько приложений могут считывать или записывать данные с помощью этих API. Таким образом, БД лучше всего рассматривать как решение для продвинутого моделирования и централизованного хранения данных, а не как простой бекенд для приложения.

Эти различия показывают, что, когда пользователи PostgreSQL жалуются, что MySQL не является "реальной системой управления базами данных" и пользователи MySQL оспаривают это, говоря что это на самом деле разница в определениях, и в этом случае определения обманчиво далеки друг от друга. Понимание этих различий, я думаю, играет ключевую роль в обеспечении осознанного выбора."