У нас часто сервисные утилиты пишут в базу свои логи примерно так, чтобы их легко через морду было посмотреть:
Open3.popen2e(cmd + " 2>&1") { |i, oe, t|
oe.each{ |line| add_log_line(line.strip) }
}
Один сервис пишет довольно много логов и, что еще усугубило ситуацию, в процессе миграции одной ногой (база) он остался в хероку, а второй
ногой (сам код) ушел в Селектел. И в такой раскоряке он начал вдруг работать неприятные 50 минут и больше.
После небольшого исследования нашли
причину, что инсерт в базу довольно долгий, так как база далеко, и код 40 минут из 50 сидит в базе, тормозя запуск внешнего скрипта.
Самой утилите уже больше 3 лет, поэтому чтобы
ничего не трогать просто вынесли логирование в отдельный поток и стали отправлять логи батчами (пишу и понимаю, что хватило бы только второго шага).
Всякое бывает.
UPDATE: Выкинул отдельный поток, оставил только отправку логов пакетом не чаще раза в 3 секунды.
Работает также быстро. Не люблю треды, еще Кнут говаривал, что мультипоточное программирование - от лукавого.