У нас есть два сервера IIS 7, которые работают в веб-саду. На каждом сервере есть копия каждого сайта. Файлы синхронизируются с помощью DFS (только исходные файлы). Изображения и большие файлы размещаются на разных серверах с использованием общего ресурса.
По крайней мере, несколько раз в неделю мы получаем ошибку "Not enough storage available"
при чтении любого файла или обработке серверного кода. IIS Server не может сопоставить путь к локальному диску (а не только к тому, который синхронизируется с DFS), также, похоже, есть проблема с загрузкой разрешений групповой политики (мы получаем различные ошибки), и мы не можем открыть какой-либо общий ресурс ни на одном сервере на лан. Также возникают ошибки ввода-вывода при чтении файлов из других пользовательских приложений. Скорость диска и задержка во время этого сбоя в порядке. Если мы попытаемся скопировать файл или проверить скорость диска, обычно это работает. Иногда мы даже не можем запустить «мой компьютер» или любое другое программное обеспечение (например, монитор производительности). Он может запуститься только в том случае, если мы «запустим от имени администратора». На каждом диске более чем достаточно памяти.
Большинство сайтов перестают работать (но не все). После перезапуска сервера все работает нормально несколько дней, а затем проблема повторяется.
Серверы виртуализированы с использованием VMWARE, имеется 50 пулов IIS (некоторые из которых ограничены памятью) и около 200 работающих сайтов на каждом сервере. Оба сервера имеют 16 ГБ оперативной памяти (используется только около 80%). ЦП постоянно находится в пределах 30-60%.
Мы попытались изменить свойство реестра IRPStackSize на большее число, но изменений не было. Проблемы все еще существуют. Пробовали отключить антивирус (NOD) - безуспешно.
Намек? Может быть, мы приблизились к пределам IIS (для многих сайтов / пулов)? Может быть, 32-битная ОС и 16 ГБ ОЗУ? Может быть, есть какие-то «секретные» настройки реестра ... Мы не думаем, что ежедневный перезапуск является долгосрочным решением.
В Not enough storage available
ошибка не имеет ничего общего с дисковым хранилищем. Речь идет о внутренней памяти.
Эту ошибку довольно легко воспроизвести. Просто выберите кучу больших файлов (изображения, библиотеки DLL или что-то еще), щелкните правой кнопкой мыши и используйте параметр «Открыть с помощью», чтобы открыть их все с помощью Блокнота. Это должно съесть всю внутреннюю память. Когда файл подкачки приблизится к максимальной емкости, случайные службы начнут регистрировать Not enough storage available
в журнал событий. Часто они остаются в неисправном состоянии до перезапуска.
Я столкнулся с этой проблемой с моими собственными службами, и мне пришлось добавить дополнительную обработку ошибок, чтобы принудительно завершить процесс службы, когда такая ошибка произошла в потоке. Таким образом, служба перезапустится и восстановится автоматически.
IIS обычно неплохо справляется с этой ситуацией (по сравнению со средней службой Windows).
Чтобы найти процесс, который вызывает это (обычно это утечка памяти), вы должны использовать Монитор производительности mmc и записывать использование памяти запущенными процессами (будьте избирательны, решая, что записывать, поскольку эти файлы журналов могут стать довольно большими). Другой вариант - использовать xperf, который на самом деле больше подходит для отладки низкоуровневых драйверов и т.п., но может быть полезен и в этом сценарии.
Если окажется, что это служба w3wc, которая поглощает всю память, вы можете использовать такой инструмент, как совершенно новый Microsoft Аналитика приложений (или любой другой инструмент мониторинга IIS), чтобы выяснить, какой пул приложений, веб-приложение или веб-сайт несет ответственность. Затем вы можете ограничить использование памяти для этого конкретного пула или запланировать его корректную переработку.
IIS обычно может циклировать пул таким образом, чтобы никто этого не заметил (в зависимости от того, как приложение обрабатывает сеансы, если он настроен на заказ, вы можете потерять сеансы, когда все статические переменные будут сброшены). Часто обходной путь, подобный этому, достаточно хорош, и можно избежать дорогостоящего исправления ошибки (отказ от ответственности: это не «мой стиль» решения проблем, но большинству заинтересованных сторон это нравится).
32-битная операционная система с оперативной памятью 16 ГБ фактически оставит неиспользованными 12 ГБ. Обязательно следует рассмотреть возможность перехода на 64-битную ОС.
Использование переключателя PAE (расширение физического адреса) может предложить временное решение.
Для получения информации о максимальной памяти, которую ОС может использовать вместе с информацией о переключателе PAE, посмотрите:
http://msdn.microsoft.com/en-us/library/windows/hardware/gg487503.aspx
С Уважением,
Может быть утечка памяти? Возможно с таким количеством пулов IIS, в зависимости от того, что они делают.
Легко контролировать с помощью POOLMON.EXE от Microsoft (возьмите его из официальных инструментов поддержки 2003)
Сценарий Powershell, который я запускаю ежечасно, пока "перезагрузка -> сбой".
$date = get-date -Format ddMMyy-hhmm
.\poolmon.exe -b -n Output-$date.log
#send-mailmessage -smtpserver 10.1.1.11 -to patrick@mail.co.uk -from poolmon@mail.co.uk -subject "Poolmon output $date" -attachments "Output-$date.log"
#Extract top offender
$TAG = (Get-Content Output-$date.log)[3]
$Code = $((($TAG -replace '\s+', ' ').split(" "))[1])
$Byte = $((($TAG -replace '\s+', ' ').split(" "))[6])
ECHO "$Code,$Byte" >>chart.csv
Chart.CSV покажет вам верхний ТЕГ и его выделенное значение в байтах.
В Output-$date.log
покажу вам все.
Если у вас есть один нарушитель наверху, он остается наверху и увеличивается до тех пор, пока не произойдет сбой, у вас есть вероятный кандидат на причину.
Также поищите в Eventvwr в разделе system события от SRV
упоминание "недостаточных ресурсов"
Прежде всего, это множество сайтов, которые будут работать с таким количеством рабочих процессов IIS в 32-битной операционной системе. Как отмечали другие пользователи, 64-разрядная операционная система определенно уменьшит проблемы с производительностью.
Во-вторых, вы получаете сообщения об ошибках в хранении, но не предоставили никакой информации о пространстве для хранения. Вы проверили диски на всех серверах, чтобы убедиться, что на них достаточно места для хранения? Вы проверили настройки виртуальной памяти и убедились, что на диске, на котором находится файл подкачки, достаточно места? Как в VMWare хранятся виртуальные жесткие диски - локально или в общем сетевом хранилище?
В-третьих, нет информации об операционной системе, но поскольку IIS 7 работает, я предполагаю, что это Server 2008. Вы проверяли, доступны ли для серверов пакеты обновления и исправления, и читали примечания к выпуску? В одном из них может быть исправление.
Я также рекомендовал бы запускать PerfMon на всех серверах и искать длинные очереди физического диска, использование ЦП,% использования файла подкачки и сбоев страниц памяти / сек. Также посмотрите на мониторинг VMWare и посмотрите, есть ли какие-либо проблемы с хранилищами данных, такие как высокая задержка.
Эта проблема может быть вызвана рядом причин, включая потерю связи с хранилищем, файлы подкачки, превышающие пределы диска, или ряд других причин. Если бы вы могли опубликовать точный текст события в средстве просмотра событий и некоторую другую диагностическую информацию, которая могла бы помочь. Поскольку у вас возникают проблемы с загрузкой групповых политик и другие проблемы с приложениями, которые не загружаются, не перескакивая через некоторые препятствия, я также не исключаю полностью поврежденную операционную систему на этом этапе.
Эта проблема возникла у меня на виртуальной машине. У него ограниченное пространство, потому что это бесплатная стандартная лицензия. Все инструменты являются инструментами разработки, и все они мне нужны.
Диск C: переполнен из-за последовательных обновлений безопасности Windows. Я вообще ничего не мог удалить.
Windows считает, что ей нужно место на диске для копирования файлов, вероятно, потому, что она подключена к своей системе виртуальной памяти. Я решил проблему следующим образом:
1) Cygwin уже был установлен в системе
2) Я cp -rv файл от источника до места назначения
3) Не забыли заключать файлы в кавычки
Смотрите, как это успешно копируется. Если вы хотите, чтобы работа выполнялась правильно, не используйте Windows. Если вам нужно установить командную строку, используйте MobaXterm (это меньшая установка).