Я заметил, что мой рабочий сервер "svchost.exe -k netsvcs" занимает более 1 ГБ оперативной памяти, что, на мой взгляд, немного избыточно.
Вот что TaskList / SVC даст мне для этого процесса:
Appinfo, CertPropSvc, gpsvc, IKEEXT,
iphlpsvc, LanmanServer, ProfSvc, Schedule,
SENS, SessionEnv, ShellHWDetection,
Winmgmt, wuauserv
Мне было интересно, что может быть процесс, который отвечает за эту утечку памяти и как это исправить. У кого-нибудь было такое же поведение в прошлом?
Сервер работает под управлением Windows Server 2008 R2 (сборка 7601: пакет обновления 1), и его основная функция - запуск собственных рабочих процессоров приложений.
windows-server-2008-r2
svchost
agentsvr
источник
источник
SC Config Servicename Type= own
. См. Serverfault.com/questions/12278/…Ответы:
Вопрос в том, это утечка? Вы говорите, что использование памяти "устойчиво".
Утечка = использование памяти увеличивается со временем, а не уменьшается, поэтому приходится периодически перезагружать сервер.
Если такты остаются на ~ 1 ГБ в течение длительного времени (скажем, две недели), то ситуация совершенно нормальная. Современное программное обеспечение предназначено для использования свободной памяти при необходимости, и я знаю несколько программ, которые просто захватят все, что только есть, чтобы сэкономить время на выделение памяти.
Если это не мешает работе системы, не трогайте ее.
источник
Выделение памяти очень затратно на циклах ЦП по сравнению с повторным использованием существующей выделенной памяти. Часто после запуска программы, до тех пор, пока она не завершит свою функцию, она не «отпустит» эту память.
Например, Firefox некоторое время хранит память. Если вы оставите компьютер включенным на неделю с открытым Firefox, вы заметите, что его объем памяти будет постоянно увеличиваться. После YouTubing, Google Play Musicing и просмотра, у меня в памяти остается 2-4 ГБ - что сокращается до 300 МБ после перезапуска процесса. Это из-за его особенностей кэширования, и это поведение разработано.
Я склонен полагать, что процесс SVCHost работает именно так, как и должен. Сколько сервисов работает на вашем сервере? 1GB Не звучит относительно - хотя это зависит от того, какие службы вы используете.
источник
В качестве следующего шага, если вы хотите продолжить исследование, я бы установил проводник процессов (procxp.exe), который вы можете найти на сайте Microsoft. Это даст вам информацию о том, какие сервисы используют этот процесс (см. Скриншот с procxp), затем вы можете остановить / запустить сервисы и посмотреть, связан ли определенный сервис с освобождением / получением большого выделения памяти. Он также скажет вам, выделена ли рабочая память или частная (= в основном куча) выделенная память. Если он привязан к конкретной услуге, у вас будет более четкий путь для дальнейших исследований.
Само собой разумеется, что вам нужно будет выполнить это тестирование в согласованном окне отключения / обслуживания или воспроизвести на тестовом сервере, поскольку вы будете прерывать обычные операции. Перезагрузка и проверка списка сервисов вернутся к вашему обычному набору запуска после завершения тестирования.
Скриншот:
источник