![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Начал что-то Thunderbird тормозить, ВНЕЗАПНО. И при запуске и при открытии емылов, особенно если с аттачами - то вообще виснет намертво. И место на диске, где он живет, закончилось ни с того не сего.
Начал разбираться. Ну 10000 комментов чуть более чем за полгода из ЖЖ это хрен с ним, 100-150 мег, не страшно. Ну психи-клиенты присылающие в аттачах неупакованные логи - еще мег 100. А потом смотрю - лежит файло mimeTypes.rdf, xml размером в 200 мег(!). И в нем один тэг занимает 99% всего файла, а содержимое его - строка составленая из несчетного количества повторяющихся строк-путей к папке thunderbird.
Короче, как я понял, сначала у него заклинило в голове при заполнении этого файла и он туда запилил 200 мег конкатенированных строк, а потом каждый раз при попытке анализировать этот файл читал его _посимвольно_ и парсил.
Ключевой аспект - забили на кэширование чтения файла. Не знаю, что за дырявые абстракции в алгоритмах кэша винды, но если поверх них добавить свой кэш, например читать из файла кусками по мегабайту, а потом уже в памяти анализировать - скорость отличается реально на порядки, 5 часов vs 15 минут, например, для файла с хитрожопыми бинарными объектами.
Начал разбираться. Ну 10000 комментов чуть более чем за полгода из ЖЖ это хрен с ним, 100-150 мег, не страшно. Ну психи-клиенты присылающие в аттачах неупакованные логи - еще мег 100. А потом смотрю - лежит файло mimeTypes.rdf, xml размером в 200 мег(!). И в нем один тэг занимает 99% всего файла, а содержимое его - строка составленая из несчетного количества повторяющихся строк-путей к папке thunderbird.
Короче, как я понял, сначала у него заклинило в голове при заполнении этого файла и он туда запилил 200 мег конкатенированных строк, а потом каждый раз при попытке анализировать этот файл читал его _посимвольно_ и парсил.
Ключевой аспект - забили на кэширование чтения файла. Не знаю, что за дырявые абстракции в алгоритмах кэша винды, но если поверх них добавить свой кэш, например читать из файла кусками по мегабайту, а потом уже в памяти анализировать - скорость отличается реально на порядки, 5 часов vs 15 минут, например, для файла с хитрожопыми бинарными объектами.
no subject
Date: 2010-02-03 12:51 am (UTC)no subject
Date: 2010-02-03 04:38 am (UTC)а вообще при расследовании подобных казусов стоит почитать кого-то вроде руссиновича и выяснить, входит ли вообще считывание по байту в список сценариев, на которые рассчитывали разработчики ядра когда-то...
ну, например, вот последний нтфс умеет продолжительное время открытый файл снапшотить, это ж означает что транзакция закрывается и открывается не только при открытии и закрытии, а и при записи иногда... всякое такое.
no subject
Date: 2010-02-03 05:57 am (UTC)Вот именно. А как без него кешу себя проявить?
no subject
Date: 2010-02-03 07:55 am (UTC)no subject
Date: 2010-02-03 07:58 am (UTC)100% ядра процессора жрет и при этом читает с диска с очень маленькой скоростью и некратными степени двойки порциями.
no subject
Date: 2010-02-03 10:27 am (UTC)