13 ноября 2015

Открыл для себя связку Apache JMeter и Webdriver

По долгу службы в мои обязанности входит генерация технических статей для нашего корпоративного блога. В преддверии выхода Magento 2 мы решили протестировать ее производительность в сравнении с Magento 1. В Magento 2 встроен Full Page Cache, который очень интенсивно использует AJAX запросы для загрузки динамических блоков, которые впоследствии вклеиваются в страницу. Я уже использовал JMeter для тестирования сайтов, где не используется AJAX, но для Magento 2 этот подход не годится.

При установке Apache JMeter 2.13 и плагина Webdriver 1.3.1 столкнулся с особенностью установки. Дело в том, что плагин содержит в себе более свежие версии httpmime, httpclient и httpcore.

% tar -tf ~/downloads/apache-jmeter-2.13.tgz | grep lib/http 
apache-jmeter-2.13/lib/httpclient-4.2.6.jar
apache-jmeter-2.13/lib/httpcore-4.2.5.jar
apache-jmeter-2.13/lib/httpmime-4.2.6.jar

% unzip -l ~/downloads/JMeterPlugins-WebDriver-1.3.1.zip | grep lib/http
    40692  2015-10-12 10:08   lib/httpmime-4.5.jar
   727567  2015-10-12 10:08   lib/httpclient-4.5.jar
   322234  2015-10-12 10:08   lib/httpcore-4.4.1.jar

Из-за этого тест не работал без видимых причин, пока я не обратил внимание на счетчик ошибок JMeter. Достаточно удалить соответствующие файлы из дистрибутива JMeter и тест запустился без проблем.

К сожалению подобная связка не подходит для нагрузочного тестирования - уже запуск 5 потоков теста ощутимо нагружает мой ноутбук с core i5, на котором запускается тест. Есть еще Selenium Grid, который вроде как решает эту проблему, но без webdriver мне удавалось создавать параллельную нагрузку на сервер в 40-50 одновременных пользователей.

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

11 ноября 2015

Проблемы с hibernate после обновления ядра без перезагрузки

Достаю утром ноутбук из сумки и понимаю, что он подозрительно теплый. Вспоминаю, что вчера в офисе между делом накатил обновления, среди которых оказалось и обновление ядра. Сразу перезагрузиться не получилось, а потом не до того было. Перед уходом домой включил на ноутбуке ждущий режим (suspend to ram) и закинул его в сумку.

Особенность моего ноутбука в том, что на нем используется набор скриптов из laptop-utils, один из которых спустя несколько часов будит ноутбук и сразу переводит его в спящий режим (suspend to disk). Это сделано для того, чтобы исключить потерю данных, если по какой-то причине ноутбуком не будут пользоваться длительное время. Да и неприятно спустя выходные обнаружить наполовину севшую батарею.

При обновлении ядра в Debian запрещается использование hibernate (файл  /var/run/do-not-hibernate создается хуком /etc/kernel/postinst.d/pm-utils). Если систему не перезагрузить, то при попытке уснуть на диск ничего не выйдет

$ cat /var/log/pm-suspend.log
...
Wed Nov 11 02:51:52 MSK 2015: Running hooks for hibernate.
Running hook /usr/lib/pm-utils/sleep.d/000kernel-change hibernate hibernate:
kernel update inhibits hibernate (/var/run/do-not-hibernate present)
/usr/lib/pm-utils/sleep.d/000kernel-change hibernate hibernate: Returned exit code 1.

Wed Nov 11 02:51:52 MSK 2015: Inhibit found, will not perform hibernate
...

У меня подобная ситуация уже во второй или третий раз и поэтому я добавил отключение функциональности hibernate after suspend в laptop-utils.

В планах добавить поддержку фиксации версии работающего ядра в конфигурации загрузчика при обновлении ядра. В этом случае при просыпании с диска будет загружено старое ядро, а не самое свежее. А в случае штатной перезагрузки или выключения отключать привязку, чтобы загружалось самое свежее ядро. В этом случае не будет проблем с hibernate при обновлении ядра.

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

10 ноября 2015

Изменение пароля сгенерированного SSH ключа

По мотивам ответа на serverfault.com. Есть сгенерированный SSH ключ ~/.ssh/repository - нужно изменить его пароль. Для этого предназначен ключ -p у ssh-keygen:

$ ssh-keygen -p -f ~/.ssh/repository

После этого нужно ввести старый пароль, затем новый и подтвердить новый пароль еще раз.

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

09 ноября 2015

Релиз Midnight Commander 4.8.15

Спустя 8 месяцев разработки вышла новая версия файлового менеджера Midnight Commander 4.8.15. Этот релиз в основном содержит исправления ошибок.

Список изменений тут. Примечательно, что начиная с этого релиза повысились минимальные требования к Glib - теперь требуется версия 2.26.0 и выше.

Бинарные сборки для Debian/Ubuntu уже подготовлены и доступны в моем репозитарии.

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

07 ноября 2015

Поддержка Ubunty Wily в сборках Midnight Commander

Добавил поддержку Ubuntu Wily в бинарные сборки Midnight Commander, которые доступны через мой репозитарий.

Собраны последние доступные версии для стабильной версии (4.8.14-1) и ночного билда из master ветки git (4.8.15~git20151107-1). Насколько я помню из рассылки, стабильная версия 4.8.15 выйдет в самое ближайшее время.

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

06 ноября 2015

Xfce4-power-manager в Debian Jessie

На ноутбуке я использую Xfce4. После обновления с Wheezy на Jessie в какой-то момент заметил, что несмотря на настройки действий при критическом заряде батареи (если 10% и меньше, то уснуть на диск), ноутбук может высосать батарею в ноль. В Wheezy на 20% выдавало предупреждение, а на 10% засыпало на диск - в отличии от ждущего режима (suspend to ram) это гарантировало, что ничего не испортится и не потеряется.

В Jessie пакет xfce4-power-manager имеет версию 1.4.1-1. Покопался в багтрекере Debian и нашел баг #694391, которому скоро будет 3 года. В unstable есть версия свежее (1.4.4-4) и я решил попробовать ее. Бэкпорт не требует никаких правок и пакет достаточно пересобрать в окружении jessie. Результат я положил в свой репозиторий в раздел backports:

deb http://www.tataranovich.com/debian jessie backports

Чтобы не было проблем с проверкой подписи пакетов нужно установить пакет tataranovich-keyring или импортировать ключ 76FB442E.

Сразу скажу, что проблема с засыпанием при низком заряде батареи решилась. Заодно вернули значок в трее.

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

05 ноября 2015

Wetek OpenELEC box

Решил попробовать готовое решение для OpenELEC вместо самосборных решений на базе HTPC. Заказал Wetek OpenELEC box, который теперь официально поддерживается дистрибутивом OpenELEC.


Цена невысокая, доставка бесплатная - оформил заказ и забыл. Но был удивлен, когда через пару дней позвонили из TNT и сообщили, что посылка на мое имя ожидает таможенное оформление. Тут я впервые познакомился с процедурой оформления посылок, отправленных в наш край через курьерскую службу.

Оформил декларацию и посылку доставили на следующий день в офис. Вечером распаковал и подключил к телевизору, но в ответ тишина. Телевизор пишет, что нет сигнала и уходит в спящий режим. При этом лампочки на железке то загораются, то гаснут. Подключил через заведомо рабочий HDMI кабель и увидел картинку - появляется заставка, а затем через пару секунд происходит перезагрузка и все начинается с начала.

Написал в саппорт Wetek и начал гуглить. Ответ из саппорта пришел быстро, но я уже успел найти ссылку на обсуждение boot loop у этих девайсов. Оказывается внутри установлена SIM карта и если ее контакт ненадежный, то девайс будет перезагружаться.


Переткнул симку и коробка загрузилась. Теперь стоит на кухне и развлекает жену во время готовки вкусняшек.

По поводу дохлого HDMI кабеля саппорт предложил выслать замену, но вчера пришел не новый HDMI кабель, а композитный. В принципе смысл фразы "HDMI cable replacement" можно трактовать и так...

В остальном нареканий пока нет. Единственное что хотелось бы - отдельные программируемые кнопки на пульте для включения/выключения телевизора и управления его уровнем громкости. Такое реализовано в пультах, которые идут с приставками Zala.

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.