Меня попросили устранить неполадки на сервере, на котором размещено наше приложение, у клиента.
За последнюю неделю клиент жаловался нам дважды - через полторы недели. В одном случае они заявили, что память сервера «исчерпана», а в другом случае заявили, что процессор был «исчерпан». В обоих случаях наше приложение стало непригодным для использования, и клиент был вынужден перезагрузить сервер.
Технические характеристики сервера следующие:
System Manufacturer Dell Inc.
System Model PowerEdge R320
System Type x64-based PC
Processor Intel(R) Xeon(R) CPU E5-2430 0 @ 2.20GHz, 2200 Mhz, 6 Core(s), 12 Logical Processor(s) - Hyperthreading-enabled???
OS Name Microsoft Windows Server 2008 R2 Standard
Version 6.1.7601 Service Pack 1 Build 7601
Installed Physical Memory (RAM) 32.0 GB
Total Physical Memory 32.0 GB
Available Physical Memory 26.1 GB
Total Virtual Memory 41.7 GB
Available Virtual Memory 34.9 GB
Page File Space 9.77 GB
Page File C:\pagefile.sys
Наше приложение работает на Microsoft SQL Server 2012 (11.0.2100.60 (X64) - Standard Edition), IIS 7.5, a handful of proprietary Windows Services applications
- все они находятся на одном сервере.
В последнее время производительность приложения стала более стабильной и приемлемой. Но у меня такое чувство, что здоровье этого сервера снова ухудшится - это лишь вопрос времени.
Меня попросили расследовать эти предыдущие случаи. Но, похоже, мне особо нечего делать.
В средстве просмотра событий Windows было несколько записей, подтверждающих их утверждения о нехватке памяти. 12 из этих записей последовательно отображались в средстве просмотра событий в течение часа.
A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: 0 seconds. Working set (KB): 221384, committed (KB): 434308, memory utilization: 50%.
Чтобы быть активным и подготовиться к еще одному потенциальному отключению, я включил ведение журнала PerfMon в CSV-файл на сервере, который включает следующие счетчики:
Я также настроил несколько базовых предупреждений по электронной почте в агенте SQL Server для уровней серьезности: 17-25 и для нескольких конкретных идентификаторов ошибок.
(1) Что еще я должен отслеживать / контролировать / делать, чтобы лучше подготовиться к следующей аварии? Я хотел бы получить достаточно данных, чтобы отследить события, которые привели к сбою.
(2) Мы знаем, что была нехватка памяти на основе записи Windows Event Viewer, но после просмотра данных PerfMon, которые я собрал до сих пор, можно выделить несколько моментов, которые могут указывать на проблемы с процессором, но я не совсем уверен. Следующее кажется слишком высоким для комфорта? Пики> 50 беспокоят меня, хотя они не для длительного периода
Для Processor Queue Length
:
Average = 0.5
Median = 0
Min = 0
Max = 89
Std Deviation = 3.07
Войдите в SQL Server Management Studio, щелкните правой кнопкой мыши свой экземпляр и выберите «Свойства»> «Память». По умолчанию SQL Server 2012 Standard устанавливает для максимального объема памяти сервера что-то нелепое, например 2147483647 МБ. Я бы установил максимальную память сервера для SQL Server примерно на 8192 МБ (или менее 32 ГБ).
Вместо использования PerfMon, возможно, вы можете использовать Профайлер SQL Server в разделе Инструменты в SQL Server Management Studio. Это потребует значительных ресурсов, но вы можете получить гораздо лучшее представление о том, что происходит в приложении, что может вызвать всплеск использования ЦП или памяти.