Почему на сервере Hetzner медленно работает диск

Заметил внезапное снижение производительности на одном из CentOS 7 серверов и не менее внезапное появление ошибок 502 Bad Gateway, которых даже во время хорошей нагрузки ни разу не было, а тут ночью во время простоя вдруг начали валить. Первым делом стал смотреть вывод iostat -x 3:

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdb 58.00 8.33 1614.33 0.33 107477.33 34.67 133.17 4.32 2.63 2.63 33.00 0.35 56.80
sda 79.33 8.33 1600.00 0.00 108074.67 0.00 135.09 29.38 18.14 18.14 0.00 0.62 100.00
md2 0.00 0.00 0.00 8.67 0.00 34.67 8.00 0.00 0.00 0.00 0.00 0.00 0.00
md0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
md1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
md3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

Кто-то со страшной силой читает данные с диска со скоростью 100+ Мб/с, как видно, значение столбца rkB/s 107477.33 и 108074.67 для каждого из дисков в софт-рейде. Первым делом стал грешить на Docker, мало ли что происходит в одном из сотни контейнеров. Вполне мог задеплоиться кривой или дырявый релиз софта, однако Docker оказался не причём. Читать далее Почему на сервере Hetzner медленно работает диск

Как установить ping в docker-контейнер?

Может случиться так, что при попытки что-нибудь попинговать изнутри docker-контейнера появиться пренеприятнейшая ошибка:

bash: ping: command not found

Как известно, docker-образы собираются как можно более минималистичными, чтобы не занимать место ненужными командами. Однако, при необходимости всё можно доставить поверх образа. Читать далее Как установить ping в docker-контейнер?

Как в PHPStorm сгенерировать сигнатуры методов для интерфейса?

Достаточно злободневная тема. Допустим, у вас есть некий интерфейс и вам нужно его реализовать. В идеале хотелось бы сгенерировать новый класс который бы содержал все сигнатуры и определения. Но нет. Чтобы провернуть это в PHPStorm потребуется вручную создать новый класс и объявить ему implements AnyInterface. Теперь жмёт Alt + Insert, или в контекстном меню редактора выбираем пункт «Generate…», затем «Implement Methods…», либо сразу нажимайте Control + I. Читать далее Как в PHPStorm сгенерировать сигнатуры методов для интерфейса?

Как на PHP получить timestamp с точностью до наносекунд?

На чистом PHP данная задача не реализуема, но есть небольшой лайфхак:

$nanotime = system('date +%s%N');

В результате $nanotime будет содержать значение: 1523648935928101682, где 1523648935 это привычный всем timestamp, а часть 928101682 собственно наносекунды. Читать далее Как на PHP получить timestamp с точностью до наносекунд?

Как в nano перейти на указанную строку в файле

Способ первый, если файл ещё не открыт, то можно указать строку через аргумент +N, uде N — нудная строка:

nano +10 file.php

Второй способ для перехода на нужную строку прямо в редакторе nano. Нажмите сочетание клавиш Ctrl + «_», на что будет задан вопрос:

Enter line number, column number:

Вводите нужный номер строки и жмите Enter.

Базовые принципы оптимизации SQL запросов

MySQL достаточно быстрый сервер баз данных. Во многих ситуациях он превосходит PostgreSQL и другие решения по производительности. Однако, любой даже самый быстрый сервер можно загрузить никому ненужной работой из-за неправильно написанного SQL запроса или неподходящей структуры таблиц. Рассмотрим актуальные на 2018 год способы оптимизации SQL запросов для MySQL сервера. В данной статье будут рассмотрены довольно очевидные вещи, которые можно затюнить без применения анализатора запросов Explain. Читать далее Базовые принципы оптимизации SQL запросов

Рост популярности чатботов для месседжеров

Идея чатботов не является чем-то новым, причём за последние два года компании усиленно ориентировались на их создание. Однако это произошло не в одночасье. Люди заинтересовались в создании робота, способного общаться с людьми, в начале 1960-х годов. Здесь уместно упомянуть компьютерные программы «Алиса» (ALICE) и «Умник» (SmarterChild).

С тех пор в этой сфере сделан огромный шаг вперёд. Сегодня уже есть AI-помощники (AI − искусственный интеллект), такие как «Сири» (Siri) и «Кортана» (Cortana), а также домашние помощники − беспроводная колонка «Эхо» (Amazon Echo) и смарт-динамик «Гугл Дом» (Google Home). Более 100 000 ботов насчитывается на платформе «Мессенеджер» (Messenger) от Facebook. Читать далее Рост популярности чатботов для месседжеров

Ассемблер для начинающих. Примеры простых программ

Многие считают, что Assembler – уже устаревший и нигде не используемый язык, однако в основном это молодые люди, которые не занимаются профессионально системным программированием. Разработка ПО, конечно, хорошо, но в отличие от высокоуровневых языков программирования, Ассемблер научит глубоко понимать работу компьютера, оптимизировать работку с аппаратными ресурсами, а также программировать любую технику, тем самым развиваясь в направлении машинного обучения. Для понимания этого древнего ЯП, для начала стоит попрактиковаться с простыми программами, которые лучше всего объясняют функционал Ассемблера. Читать далее Ассемблер для начинающих. Примеры простых программ

Как в Linux получить часть файла по номерам строк?

Достаточно повседневная задача, поделить файл на части не выходя из bash.

sed -n 4646,9999p old.file > new.file

Где 4646 — начальная строка, а 9999 — конечная строка.

Быстрый экспорт данных с джойнами из MySQL в Clickhouse

Подготовка и импорт данных в Clickhouse достаточно обширная тема. В данной заметке приведу рецепт быстрого экспорта данных с джойнами из MySQL в CSV с последующим импортом этих CSV в Clickhouse. В MySQL есть очень полезная директива: INTO OUTFILE, которая в контексте SELECT запросов сохраняет данные в файл на сервере, а не отдаёт клиенту. Важно, что выполнить SELECT с опцией INTO OUTFILE сможет только пользователь имеющий привилегию FILE.

Всё было бы хорошо, если нужно экспортировать одну плоскую таблицу без джойнов даже с десятками миллионов строк это было бы очень быстро. Однако, как только в запрос для экспорта добавляются джойны — время экспорта такого запроса вырастает в десятки и сотни раз, что неприемлемо. Обойти это можно с помощью экспорта данных небольшими пачками, например по 100 000 записей за раз. Читать далее Быстрый экспорт данных с джойнами из MySQL в Clickhouse