высокий уровень использования RAM в win server 2008[fixed]

anton7805

Имеем Windows Server 2008 R2, 8GB оперативки
Столкнулся со следующей проблемой:
Win server через несколько дней после перезагрузки съедает почти всю физическую память и ,соответственно, сильно тормозит.
Файл подкачки определяется системой автоматически.
Если подсчитать всю память всех процессов в системе, то получается 760 MB. Но реально отжирается 7300MB, т.е. почти в 10 раз больше.
Подскажите, в какую сторону копать?

Dasar

Если подсчитать всю память всех процессов в системе, то получается 760 MB.
по какому счетчику подсчитывал? что показывает commit size?
ps
что показывает закладка performance?

juliuzz

это ж сервер!
файловый кеш небось
плюс всяческие префетчи семёрочные
отключи вообще подкачку
больше чем надо не съест

anton7805


Подсчитал тупо - через монитор ресурсов скопировал столбец Memory Usage со всеми данными в эксель и подсчитал сумму

anton7805

Все лишнее отключено ,
по сути сервак функционирует в режиме Висты.

Dasar

ЧТО ПОКАЗЫВАЕТ COMMIT SIZE в сумме по всем процессам?

anton7805

Винда русская, пока разобрался, как будт commit size по русски...
В общем, по русски это зовется "Выделенная память" 3827 MB

Dasar

кстати, стандартный совет - если есть возможность переставить ос, то лучше переставить.
времени и нервов - это займет меньше, чем обнаружение проблемы, а вот если проблема повторится - тогда уже стоит поискать в чем дело.

saveliev_a

Ну как бы классика. Где-то утечка памяти. Чтобы найти ее, отруби по одному все стороннее на сервере. Мне кажется, на этом этапе уже найдешь проблему.

Filan

Бу-га-га!
Типичный M$-way - проще перестаить, чем разобраться.

Dasar

Типичный M$-way - проще перестаить, чем разобраться.
логично. для сервера на *nix-е, чтобы он как-то работал, нанимают специального шамана, которому конкретно платят деньги за то, чтобы оно работало. вот этот шаман свои зарплату и отрабатывает.
а windows работает сам без всяких шаманов, и деньги окружающим платят за их работу, а не за укротительство ОС, и соответственно всем этим окружающим проще взять новый instance ОС, как берут новый пластиковый стаканчик, чем заклеивать жевачкой старый (чем обычно и занимается опытный *nix-шаман).

AlexV769

У продвинутых *nix шаманов используются легкие термокружки, которые не дырявятся, в отличие от пластиковых стаканчиков, если в них вместо воды из кулера налить горячего чаю.

Dasar

это не отменяет того факта, что для каждой такой термокружки требуется по шаману, а то и по два для надежности

uncle17

сколько стоит такой шаман в месяц по сравнению с однократной тратой на венду?

AlexV769

Т.е. винду надо переустанавливать раз в месяц, чтобы она нормально работала?
Записал в блокнотик. (с)

Dasar

Т.е. винду надо переустанавливать раз в месяц, чтобы она нормально работала?
Записал в блокнотик. (с)
систему(любую) имеет смысл "перезагрузить" с нуля при возникновении нештатной неповторяющейся проблемы. это удобнее, чем искать проблему. Но для профессионалов, которые этим зарабатывают, как Kivi или Гулька, всё наоборот, им выгоднее разобраться с причиной, чем от нее избавиться
винда так себя ведет где-то раз в три года на 100 установок

anton7805

Поднять новый инстанс винды практически исключен, надо выяснить в чем же дело.
Если есть программные утечки памяти, он же вроде должны чиститься при завершении процесса.
Тут же ситуация такая, что физ. памяти используется в 10 раз больше, чем сумма памяти всех процессов вместе взятых.
Вычитал в инетрнетах, что начиная с висты (а win server 2008 ,базируется на висте ) используется superfetch
В кратце, это технология кеширует в оперативке часто импользуемые данные программ, чтобы программы стартовали шустрее. Но в таком случае,не понятно почему все начинает дико тормозить, при приближении физ. памяти к максимуму. По идее, первой жертвой должны становиться закешированные данные, но по факту обращение критичных к произовдительности системы служб к свопу (apache , Mysql и т.д.) превышает все разумные пределы.

Dasar

superfetch не причем, под кэш у тебя занято 700мб.
у тебя утечка или в драйвере, или какая-то прога хавает системные объекты и не отдает

Dasar

важные update-ы, кстати, все ставятся? и опциональные на драйвера?

Dasar

посмотри, кстати, какой у тебя процесс так активно хавает дескрипторы?

anton7805

хм, дров-то там нет практически и все родные интеловские

uncle17

ну это может не мешать им косячить: тот же дисковый контроллер, к примеру

anton7805

Других вариантов не было :) Используются только те дрова ,которые шли с интеловским серваком.

anton7805

посмотри, кстати, какой у тебя процесс так активно хавает дескрипторы?

mysql

Dasar

если его завершить, то что происходит?

uncle17

хых
а коннекты с ним закрываются при использовании?

anton7805

Да ничего не просиходит, ну м.б. на 1% понизится память.
Коннекты к б/д не закрываются, т.к. есть пул коннактов от сервера приложений к базе, а производительность связки app server+db в приоритете

Dasar

Да ничего не просиходит, ну м.б. на 1% понизится память.
дескрипторы хотя бы до какого числа сливаются?

anton7805

mysql юзает порядка 60,000 дексрипоторов , остальные процессы не более 1000

Dasar

mysql юзает порядка 60,000 дексрипоторов , остальные процессы не более 1000
а где остальные 90тыс. дескрипторов? т.е. сумма дескрипторов по процессам не равна кол-ву на закладке performance?

serega1604

>винда так себя ведет где-то раз в три года на 100 установок
это ты мечтаешь, чтобы так было, а в реальной жизни цифры другие.

anton7805

Сейчас просто перегрузил систему...
Сумма по дескрипоторам совпадает с общей.
Кстати, сразу поле перезаугрзки используется 3 гига физ памяти. Сумма по процессам 1,8 гига

Dasar

Сумма по дескрипоторам совпадает с общей.
и сколько их при этом?
зы
как память начнет течь пофиксируй периодически (штук 10-20 точек)
как растет память
как меняется кол-во дескрипторов
как меняется разница между суммой памяти по процессорам и на закладке performance
как меняется разница между суммой дескрипторов по процессорам и на закладке performance

saveliev_a

Сейчас просто перегрузил систему
А почему ты просто не стал по одному аккуратно гасить сторонние процессы, чтобы понять, кто ест память?

Filan

Объясни это админу, у которого на серваке поднята связка тяжёлого софта, устанавливать и настраивать которую надо неделю - каждое ПО только ставится по полтора часа.
А ещё проделай всё это на контроллерах домена, с сохранением всех юзеров и настроек - та ещё развлекуха. Вот здесь точно нужен именно шаман: нужно делать действия в коммандной строке, которые из гуи не делаются в принципе и документацию на это ещё поискать надо.
В юнихах как раз всё наоборот - нужен специалис, а не шаман. Даже при переустановке всё просто - все настройки в текстовых конфигах (иногда в БД - ldap и тд) - значит легко переносятся.

juliuzz

В кратце, это технология кеширует в оперативке часто импользуемые данные программ, чтобы программы стартовали шустрее. Но в таком случае,не понятно почему все начинает дико тормозить, при приближении физ. памяти к максимуму. По идее, первой жертвой должны становиться закешированные данные, но по факту обращение критичных к произовдительности системы служб к свопу (apache , Mysql и т.д.) превышает все разумные пределы.
блин, отключи своп, сказал я тебе уже
посмотри что будет

Dasar

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

la_jazz

Сейчас просто перегрузил систему...Сумма по дескрипоторам совпадает с общей.
Ну и перегружай шедуллером хоть каждую ночь (ну это я загнул, а вот раз в неделю в ночь в субботу на воскресенье).
Это может быть проблематично для систем 7*24, но такие системы обычно состоят не из одного сервака, и эти серваки можно перегружать по очереди...

Troyn09

а windows работает сам без всяких шаманов
это сказки

Troyn09

Других вариантов не было :) Используются только те дрова ,которые шли с интеловским серваком.
есть вариант обновить дрова с сайта производителя сервера/компонентов

Alena_08_11

А нахуя под mysql использовать винду ?
Или там ещё какой то appserver чисто виндовый, и неохота разносить ? А чё за тогда appserver ? Какой нить .NET самописный, раз виндоус специфик ?
ps. в свете упоминания об "apache , Mysql и т.д.", вообще непонятно становится, почему винда ?

anton7805

Винда, т.к на серваке крутится еще 1С веб сервер.
Утечка пока не обнаружилась:
Никакими стресс-тестами не удается эмулировать ситуацию с утчекой.
Как только оставляешь на пару дней, сразу пару гигов уже сжирает, уже задолбался...
Неопознанных дескриптеров не наблюдается, сумма совпадает в общим кол-вом, вот память уходит и уходит.

Alena_08_11

Винда, т.к на серваке крутится еще 1С веб сервер.
Ни разу не оправдание. Он и под апач нормально поднимается под lin. Да и Сам сервер приложений 1С под линух есть (другое дело, что нормально на нём только типовые последние можно пускать - ибо Postgree и нужны управляемые блокировки в быдлокоде процедур проведения)
А если по схеме web <-> файл-серверный вариант, то и сервер приложений 1С не нужен.
В общем всё ещё непонятно почему винда. Если испоьзуется виндовый сервер приложений 1С - то где mssql ? Если он на другой тачке - то туда и 1С запихните, и извне каким нить нгинксом проксируйте. Если mssql -нет, то значит postgree и один фиг на lin всё нада переводить. А если mssql на этой же - то он и жрёт всю память. (Из моего опыта - он съедает всю свободную оперативу и обратно особо не отдаёт ... если только по потребности)

Dasar

А если mssql на этой же - то он и жрёт всю память. (Из моего опыта - он съедает всю свободную оперативу и обратно особо не отдаёт ... если только по потребности)
млин, счетчики зачем ТС постил?
раз сумма счетчиков не бьется с общим кол-вом занятой памяти, то проблема не штатная, и не внутри процессов

Alena_08_11

Автор постоянно чего то недоговаривает. Мб и со счётчиками недоговорил что то.

anton7805

SQL Server тоже крутится. Извращения вроде установки 1С - сервера на линукс и постгрис оставим без внимания.
И вообще, сейчас не обсуждаем выбор ОС...
Память течет где-то в обход процессов.
Дело осложняется тем, что ключевые процессы на серваке нельзя выключать на долгое время. А за короткое время непонятно, является ли отключенный процесс причиной утечки или нет. Для выявления нудно день хотя бы.
Думаю, сейчас заюзать какой-нибудь процесс трейсер на предмет ловли утечек или закрытых/незакрытых дескриптеров и по-очереди наблюдать за подозрительными процессами

anton7805

раз сумма счетчиков не бьется с общим кол-вом занятой памяти, то проблема не штатная, и не внутри процессов

Все верно, сумма всех процессов рабочего набора до 10 раз меньше общей использованной памяти

Dasar

> Дело осложняется тем, что ключевые процессы на серваке нельзя выключать на долгое время.
подними виртуалку на той же машине, и начни переставлять процессы из основной машины в виртуалку при этом замапив чем-нибудь порты

saveliev_a

подними виртуалку на той же машине, и начни переставлять процессы из основной машины в виртуалку при этом замапив чем-нибудь порты
Это пипец. Кто-нибудь может объяснить мне, почему ТС до сих пор не попробовал банальное, простейшее решение: аккуратно выключать все процессы и смотреть, когда освободится память?
UPD. И да, мне кажется, я уже понял в чем причина. Но подождем ТС.

okis

По-моему, писал уже сверху, память зажирается постепенно, а сервер рабочий и отключать что-то надолго нельзя.

saveliev_a

Так не надо надолго. Вечером взял и за 15 минут все проверил.

Filan

А если течёт что-то ситемное, а не прикладное?

saveliev_a

Начать стоит с проверки прикладного. Это же очевидно.

Dasar

Это пипец. Кто-нибудь может объяснить мне, почему ТС до сих пор не попробовал банальное, простейшее решение: аккуратно выключать все процессы и смотреть, когда освободится память?
скорее всего, даже если убить все процессы, то память не появится.

saveliev_a

скорее всего, даже если убить все процессы
Мсье теоретик?
Первое, что нужно сделать, ТС так и не сделал. Свою версию я уже озвучил , расскажу, как ИС выполнит то, что нужно было сделать давно.

Dasar

я согласен, что главное в таких делах - это трясти и делить проблему на части

saveliev_a

Согласен. Теперь ждем ТС.

anton7805

скорее всего, даже если убить все процессы, то память не появится.

Конечно же, все подозрительные процессы были поочередно отключены.
Результат - память процессов освобождалась, утекшая память - нет
Более того, как только поочередно включал процессы, проводил стресс тестирование (насколько это возможно было по результату утечек не было выявлено. В коротком промежутке времени обнаружить утечку не удалось.
Попробовал переставить драйвера котроллера диска и сетевухи, посмотрим.
Так же каждые 2 часа записывается состояние памяти. Таким образом, можно понять когда происходит наибольший прирост утчеки и сузить круг подозрительных процессов
Какие еще есть способы проверить - ума не приложу

Dasar

можно настроить perfmon (выбрав нужные счетчики это тебе даст более детализированное представление о ситуации.

anton7805

так и сделал

anton7805

UPD. И да, мне кажется, я уже понял в чем причина. Но подождем ТС.

Ну так в чем?

saveliev_a

Думаю, что в скуле. Ты его выключал?

anton7805

Лови +1
Вчера ночью сам обнаружил, что под существенной нагрузкой на mssql память начинает ощутимо расти, за пару часов на 500MB.
Погуглив, нашел решение похожей проблемы ссылка
Оказалось, что все дело в buffer pool.

anton7805

Решение проблемы:
ограничить максимальный размер памяти в Sql Server.
Всем спасибо за обсуждение

saveliev_a

На будущее учти, что проще всего врубить perfmon.msc, добавить счетчик свободной памяти и по одному завершать сначала прикладные приложения, потом сторонние службы и смотреть на то, когда освободится память. В большинстве случаев на этом этапе проблему удастся решить.

saveliev_a

Да, еще вопрос. А какой скуль был, 32 бита или 64?
Оставить комментарий
Имя или ник:
Комментарий: