metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-03-23 09:57 am

Забавный баг

Третий день ловлю баг, связанный с тем, что TCP сервер под большой нагрузкой падает с ошибкой out of memory, хотя ему выделено всего 800 мег и еще гиг физической памяти свободно. На каждое воспроизведение бага - сутки работы сервера под нагрузкой в несколько раз больше рабочей.

Оказалось - нехватка виртуальной памяти, причем вообще - не самой памяти, а ее адресного пространства. Менеджер памяти при выделении/удалении сильно фрагментирует память, в итоге адресам становится мало 2^31 и все падает, с ошибками типа "not enough storage" в самых левых функциях вроде записи в инишник.
Причем, западло в том, что увидеть это число в Task Manager нельзя, нужно смотреть Process Explorer или делать лог perfmon-ом.

[identity profile] aamonster.livejournal.com 2009-03-23 08:06 am (UTC)(link)
Ничего забавного...
Вот в том числе из-за таких вещей и возникает желание переходить на .net.

[identity profile] metaclass.livejournal.com 2009-03-23 08:12 am (UTC)(link)
Ну да, есть вероятность, что тут их сборщик мусора бы как минимум дефрагментировал бы память. Очистить бы не очистил - это не забытые объекты, рабочие, просто расположены как попало.

[identity profile] aamonster.livejournal.com 2009-03-23 08:28 am (UTC)(link)
Угу.
Еще можно перейти на какую-нибудь альтернативную кучу типа quickheap - который жрет больше памяти, зато лишен упомянутого недостатка, а по эффективности кроет стандартные реализации, как бык овцу (http://rsdn.ru/article/dotnet/GCnet.xml#EPD)
(deleted comment)

[identity profile] bigfrogg.livejournal.com 2009-03-23 09:17 am (UTC)(link)
Вы пишите программы под win mobile которым не хватает двух гигабайт адресного пространства?
(deleted comment)

[identity profile] zamotivator.livejournal.com 2009-03-25 10:11 am (UTC)(link)
boost::memory_pool