Re: Слишком большое использование памяти [message #21944 is a reply to message #21729] |
Thu, 18 October 2007 05:51 |
vaverin
Messages: 708 Registered: September 2005
|
Senior Member |
|
|
Andrew,
большое спасибо за интересный вопрос, на первый взгляд он казался несложным, но когда стали копать -- выяснилось что не все так просто.
Мы скачали stress тест по указанной Вами ссылке, запустили его на наших нодах и воспроизвели описаную Ваи ситуацию.
Далее, мы повторили эксперимент на RHEL kernels -- там ситуация была в точности такой же. Попробовали на mainstream kernels -- увидели в точности такую же картину:
Cached -- отностиельно небольшой,
Inactive -- большая часть памяти.
Хочу сразу заметить -- это не баг. Вернее не memory leak. При необходимости память без проблем освобождается, memeater быстро приводит к сокращению Inactive.
По идее inacive -- память задействованная ранее под дисковый кэш, но в настоящее время никем не используемая. Однако в нашем случае inactive существенно больше cached. Почему так получается? Где-то баг?
Мы проверили значения, вроде бы все правильно. Сached -- это действительно размер дискового кэша, и он действительно небольшой. В inactive попадает только cached memory, и на первый взгляд при удалении из кэша inactive тоже должен сниматься. Вроде бы все необходимые места в ядре подперты, и ничего не забыто.
Однако же ситуация каким-то образом воспроизводится! Как же так?
Стали смотреть что делает Ваш тест -- открывает файл, удаляет его, потом много туда пишет, ну и в конце закрывает файл. В таком случае данные живут в дисковом кэше до удаления inode c filesystem, однако на pages по-видимому кто-то сслается и тем самым не дает ее освободить.
Пытались повторить опреации вручную -- не вопроизводится. Да и в экспериментах со stress inactive начинала расти отнюдь не сразу. По-видимому, влияет еще некий фактор.
Заметили, что buffer heads тоже достаточно много -- возможно они держат. Но их по идее тоже пытались почистить при закрытии файла, но очевидно по каким-то причинам не получилось.
На этом, в сущности, пока и застряли. Да, память не утекает, и явного бага тут нет. Да, ситуация странная и не вполне нормальная -- вся память оказывается забита данными, которые вроде бы никому не должны быть нужны. Пямять кто-то держит, но кто -- непонятно. Разбирательство "в лоб" захлебнулось.
Однако жить оно тем не менее особо не мешает, поэтому пока мы отложим эту проблему в сторонку, будем думать и разбираться. Глядишь, со временем что-нить прояснится.
С уважением,
Василий Аверин
Head of SWsoft Linux kernel support team
|
|
|