Назад | Перейти на главную страницу

Память (физические и виртуальные страницы) заканчивается по неизвестной причине

В последнее время наш сервер частенько зависает. Я подозреваю утечку памяти, но все еще не могу найти подозреваемого. Журнал событий фиксирует ситуацию следующим образом:

- <SystemInfo>
  <SystemCommitLimit>49195651072</SystemCommitLimit> 
  <SystemCommitCharge>49195651072</SystemCommitCharge> 
  <ProcessCommitCharge>3172712448</ProcessCommitCharge> 
  <PagedPoolUsage>432541696</PagedPoolUsage> 
  <PhysicalMemorySize>16983396352</PhysicalMemorySize> 
  <PhysicalMemoryUsage>16197967872</PhysicalMemoryUsage> 
  <NonPagedPoolUsage>183476224</NonPagedPoolUsage> 
  <Processes>139</Processes> 
  </SystemInfo>
- <ProcessInfo>

Как видите, SystemCommitCharge достигает SystemCommitLimit (~ 45 ГБ), но ProcessCommitCharge составляет всего 3 ГБ.

Я даже проверяю 3 процесса, которые в то время используют больше всего памяти, но вместе они используют только около 1 ГБ. Еще около 100 процессов, но каждый из них использует не более 50 МБ.

Windows успешно диагностировала нехватку виртуальной памяти. Следующие программы потребляли больше всего виртуальной памяти: sqlservr.exe (4480) потреблял 565637120 байт, mysqld.exe (4500) потреблял 362201088 байт, а java.exe (1628) потреблял 314191872 байта.

Кажется, все указывает на то, что есть что-то, кроме моих процессов, которые потребляют ресурс.

Еще я заметил, что в настоящее время (после перезапуска системы) наша выделенная память и кэш значительно увеличиваются по сравнению с обычным использованием памяти. Однако при повторной проверке с помощью Rammap я вижу, что большая часть памяти находится в режиме ожидания, что означает, что это не должно влиять на производительность системы. Кроме того, невыгружаемая память теперь составляет всего 133 МБ, так что проблема драйверов не должна быть проблемой. Я ничего не понимаю.

Внимательно проверив наш сервер в течение 3 дней, я вижу, что объем используемой памяти постепенно увеличивается:

(30/08)

Используется = 3,4 ГБ выделено = 5,3 ГБ кэшировано = 2,2 ГБ выгружаемого пула = 225 МБ невыгружаемого пула = 76,2 МБ до

(01/09)

Используется = 3,9 ГБ, выделено = 23,9 ГБ кэшировано = 11,9 ГБ выгружаемый пул = 335 МБ невыгружаемый пул = 133 МБ

Есть ли способ обнаружить этот «таинственный фактор» в действии?

Вы можете проверить утечку памяти с помощью Poolmon ...

Это часть комплекта драйверов Windows (WDK).

Некоторые полезные ссылки от Microsoft:

http://msdn.microsoft.com/en-us/library/ff545405(v=VS.85).aspx

http://msdn.microsoft.com/en-us/library/ff550458.aspx

http://msdn.microsoft.com/en-us/library/ff550442(VS.85).aspx