← All posts tagged debug

fillest
Python code debug profile draft
Семплирующий профайлер тут сочинил для рентгена змеедемонов в продакшене.

Для такого кота:
def main ():
	while True:
		time.sleep(0.2)
		time.sleep(0.3)
		time.sleep(0.5)
main()

высирает посекундно такое (пока текстом в лог, потом с уеб-мордой):
2015-03-03 23:52:29,849UTC INFO  collector_new.py:aggreg:49  ---
@@@ thread 140081144379200
49.7% ('perstam/sampler_new.py', 96, 'main') time.sleep(0.5)
28.9% ('perstam/sampler_new.py', 95, 'main') time.sleep(0.3)
21.4% ('perstam/sampler_new.py', 94, 'main') time.sleep(0.2)
2015-03-03 23:52:30,851UTC INFO  collector_new.py:aggreg:49  ---
@@@ thread 140081144379200
48.7% ('perstam/sampler_new.py', 96, 'main') time.sleep(0.5)
31.6% ('perstam/sampler_new.py', 95, 'main') time.sleep(0.3)
19.8% ('perstam/sampler_new.py', 94, 'main') time.sleep(0.2)
fillest
tech debug io profile perf (i have no idea, зачем я это сюда пишу, причем первым постом, но что-то вдруг захотелось)
Листая в brendangregg.com пример с мускулом, тут же вспомнил про временно отложенные неразрешенные монгопытки и осознал одну хитроту. Но сначала — прелюдия.
Вышло, что вороне где-то б-г послал кусочек монги, под мелкой но нагрузкой. Запросы тормозят, причем периодически разными скачками вроде бы без явного паттерна и корреляции с другими показателями, а для усиления ощущений она обитает на эмозоне и не умещается в память. Про себя она какие-то чиселки рассказывает, но бессвязные — не складывается картина, вобщем. Но периодически плотно шуршит iowait. И вроде и не локи, и user/sys не высок.
Закрадывается мысль — а вдруг это и правда io-боттлнек. И вариант "послать аффтарам бомбу с гвоздями и открыткой; переписать уже наконец под человеческий поцгрес" возможно просто так и не сработает (а тестить долго, сложно и синтетично). Особенно, учитывая что это омасон, т.е. неизвестно, что или кто там вместо харда, и сколько еще лохов сидят с тобой на железке и чем занимаются; прям как в старое доброе пыховековье.
И вот щас щелкнуло, что сферическое упирание в io (как и во всё прочее) — очень неоднозначная штука, т.к. io можно закодерировать неэффективно. Размеры страниц-буферов, шедулинги операций, журнал, да мало ли что еще. Мысль-то тривиальная конечно, но при прошлом обдумывании почему-то не возникла.
И вот интересно, как такое диагнозировать. Из первого, что приходит в голову — потрейсить какие-то сисколлы (впрочем с mmap-то это наверно вместе с ведром надо трейсить..), порисовать всякие длины, locality. Вобщем, что-то такое как профайлинг, но под адскую специфику disk io. А для исключения облакодилд погонять генерилку искуственного ровного io на предмет скачков (но это опять же, синтетика).
В рукаве еще есть карты под задачу — частично вынести запись за очередь с ручным батчингом, например, но хочется именно научиться аналитически отлаживать, по-инженерному, мол.