От известно време насам имах проблеми с IMAP сървъра на машината си. То въобще на тая машина се случваха някакви странни аномалии. Всичко започна с едно неистово забавяне при влизане в мейла през използвания SquirrelMail. Трябваше по-бързо да се сетя, че проблемът не е в него, просто като проверя колко бързо работи самият Courier IMAP. Проблемът беше, че трябваше да понауча това-онова от самия протокол, а и забавянето е нещо относително, когато връзката ти е под всякаква критика.

Започнах да тествам самия IMAP сървър. За целта тръгнах да правя статистика за извикванията на системни функции със strace (опцийката “-c”). Резултатът беше многозначителен, предвид, че забавянето, както изглежда беше с write(), да даже не беше ясно писане къде и от кой от всичките процеси, което сървъра пуска. За щастие ltrace свърши по-добра работа със същите опции - гадната функцийка, която отнемаше на моменти 80% от времето при заявка през SquirrelMail се оказа FAMOpen(). Оказва се, че Courier IMAP зависи от т.нар. File Alteration Monitor при отварянето на файлове (клиентския пакет libfam0c102 и сървърния fam в Дебиан). Сървърната му част от своя страна зависи от RPC Portmapper (пакетът portmap). Проблемът се оказа, че с iptables правило бях орязал връзката до 111-то порт и двете гадинки не можеха да комуникират. Интересно ми е колко още работи за се бозили заради това…

Малък извод: Когато имаш свободен софтуер, който ти позволява да правиш някакъв вид профилиране на процесите (в случая strace и ltrace), достъпна документация за функциите (за да установиш за какво служи FAMOpen()), отворена система (за да направиш връзката с portmap) и съвсем малко (в моя случай) мозък… нещата все има как да се наредят.

Popularity: 8% [?]