Хранение вкладок Chrome постоянно растет, размер кучи остается неизменным

Я работаю с командой над одностраничным приложением с довольно большим количеством таймеров и около 10 вызовов API REST в секунду. Мы использовали инструменты профилирования памяти Chrome для выявления всех утечек памяти - в этот момент размер кучи остается примерно одинаковым (то есть между сборками мусора).

Однако мы отмечаем, что чем дольше приложение работает, тем больше памяти использует сама вкладка Chrome. Через несколько часов мы увидели, что память вкладок выросла до 350 МБ, а размер кучи остался на уровне 6 МБ. При работе в течение ночи вкладка занимает более 500 МБ и становится недоступной к утру.

Нам нужно, чтобы приложение работало в течение длительного времени (мы надеемся перезапустить его только один раз в неделю), поэтому это проблема.

Вот скриншот временной шкалы кучи за час. В итоге размер закрытой памяти вкладки составляет 350 МБ, а размер кучи остался на уровне около 5,4 МБ.

enter image description here

Мы видели это в Chrome 40 и Chrome 38 в Windows 7. У нас отключено кэширование, и приложение работает в режиме инкогнито.

Любая идея, почему объем памяти вкладок будет расти до такой степени, что Chrome будет непригодным для использования, в то время как использование кучи JS остается таким маленьким?

ОБНОВЛЕНИЕ: Мы запустили приложение в течение нескольких дней, и объем памяти вкладок составляет до 800 МБ, размер кучи остается примерно таким же.

ОБНОВЛЕНИЕ (9/9/15): Я не уверен, документировано ли это где-либо, но кажется, что Chrome изменяет объем памяти, который он выделит для вкладки, в зависимости от объема свободной памяти в системе, Таким образом, если у вас много свободной памяти, вкладки будут использовать много памяти, а если у вас ее мало, она не будет использовать столько же. Похоже, что это не пропорционально размеру кучи, это, вероятно, просто то, что Chrome хранит, чтобы сделать себя быстрее. Это только теория, основанная на мониторинге использования памяти Chrome :)

Ответ 1

Это, вероятно, слишком старо и больше не актуально, но для всех, кто сталкивался с этим: вероятно, из-за открытых инструментов разработчика. У меня было приложение, которое накапливало бы память с течением времени, при этом размер кучи оставался прежним, но когда я закрыл инструменты разработки, память сильно упала и не восстановилась, как это было, когда инструменты разработки были открыты. При профилировании долговременного объема памяти сначала используйте диспетчер задач Chrome.

Я могу предположить, что в вашем случае это происходит потому, что devtools должен хранить все эти вызовы REST API (чтобы показать их на вкладке Network), и я не уверен, что Chrome временно сохраняет их на диск для экономии памяти.