|
|
|
| Седьмого ноября я получил неожиданный подарок: владелец VDS удвоил выделенные мне ресурсы! Все: и размер дискового пространства, и производительность процессора, и объем оперативной памяти. Мне оставалось только порадоваться, хотя и прежние объемы мне не были узки: диск использовался на 30%, а загрузка процессора находилась где-то в районе нуля и еще ни разу не превысила 0.15% выделенной мощности.
Каково же было мое удивление, когда вчера посыпались автоматические сообщения типа:
"From: "Cron Daemon" Cannot fork: Cannot allocate memory"
"From: "Charlie Root" No output from the 7 files processed".
Техподдержка в ответ на мой запрос заявила, что это указывает на недостаток памяти - оперативной+виртуальной. И что какой-то из скриптов поедает ее слишком много.
Такое вполне возможно, ибо скриптов рнр я наплодил немало. Правда, все они стоят на экспериментальной малопосещаемой части сайта, куда приходит менее 100 человек в день. Да и загрузка процессора ничтожна, так что ничто не мешает ему увеличить размер файла подкачки на сколько надо.
Сейчас система имеет такие ресурсы:
Процессор Virtual CPU 186 MHZ X 2;
Загрузка 0.09 %;
Оперативная память - 96 Мб;
Файл подкачки - 191 Мб;
Трафик примерно 1 Гб в день.
При этом в файле настройки /etc/my.cnf мною еще летом сделаны такие изменения:
key_buffer = 16М
open-files-limit=500
Что посоветуете для решения проблемы? | |
|
|
|
|
|
|
|
для: Владимир55
(15.12.2007 в 11:41)
| | Мониторинг, проведенный техподдержкой, показал, что своп постоянно занят на 90%, а загрузка процессора ничтожна.
Что бы это могло значить? | |
|
|
|
|
|
|
|
для: Владимир55
(16.12.2007 в 18:32)
| | Тоже самое - не хватает памяти, страницы сбрасываются на swap система ждёт, когда они от туда будут извлечены и процессор почти не используется - так как узким местом является потребление памяти. | |
|
|
|
|
|
|
|
для: cheops
(16.12.2007 в 18:58)
| | Как я понимаю, работоспособность от этого не снижается и сбои не возникают. А просто замедляется открытие страниц. Если я подключу еще больше скриптов или увеличится посещаемость, то система соразмерно увеличит размер swap и будет работать еще медленнее, но ее работоспособность все равно сохранится.
Так? | |
|
|
|
|
|
|
|
для: Владимир55
(16.12.2007 в 19:16)
| | >Как я понимаю, работоспособность от этого не снижается и сбои не возникают.
Работоспособность снижается катастрофически. Самое плохое, что может случиться с сервером, исключая его "падение", - это уход в swap. Система работать будет, но для посетителей время отклика может стать так велико, что для них сервер будет мертв.
>Если я подключу еще больше скриптов
Собственно, кол-во скриптов тут ни при чем. Нужно смотреть кто "сжирает память". Это могут быть и скрипты, но проблема никак не в количестве, а в качестве. Довольно много памяти потребляется и MySQL. | |
|
|
|
|
|
|
|
для: Владимир55
(15.12.2007 в 11:41)
| | >куда приходит менее 100 человек в день.
Не показатель. Даже один вызов некорректного скрипта может отправить сервера в swap. Это, конечно, редкая ситуация и зачатую возникает из-за багофич PHP/Apache, но тем не менее... | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(17.12.2007 в 06:08)
| | Как показали измерения, реально у меня съедается 655 Мбайт оперативной памяти (RAM+swap).
Означает ли это, что мне нужен тариф, включающий в себя RAM порядка 700 Мбайт?
Это же огромная цифра, которую далеко не все VDS обеспечивают! | |
|
|
|
|
|
|
|
для: Владимир55
(17.12.2007 в 15:45)
| | >Как показали измерения, реально у меня съедается 655 Мбайт оперативной памяти (RAM+swap).
Не совсем так. Оперативной памяти у Вас всего 64 Мб - остальное swap.
>Означает ли это, что мне нужен тариф, включающий в себя RAM порядка 700 Мбайт?
Наверняка нет. swap - это не та память, которую Вы реально используете, типа файла подкачки в Windows. Swap - это объем памяти в какой-то момент, сброшенной на специальный раздел диска.
На какой-то момент был дефицит памяти и система сбросила, редко неиспользуемую память, как она посчитала, на диск. Так она там и осталась. Swap - не очищается автоматически как только пропадает дефицит памяти. Управление Swap значительно сложнее. Система может иметь Гиг абсолютно свободной оперативки, но swap так и не будет очищен до конца - просто потому что система в этом не нуждается (ну лежит там 200-300 Мб ненужного "мусора" - ничего страшного с точки зрения системы).
Нужно смотреть в комплексе. Сколько памяти занимают процессы, сколько свободной, сколько в "файловом" кеше, сколько на буфера. Вполне возможно, что память, действительно, постоянно сбрасывается в swap. Только определить потребность памяти по размеру swap нельзя. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(17.12.2007 в 23:00)
| | >Только определить потребность памяти по размеру swap нельзя.
Можно определить по потребностям Apache + MySQL. У Вас ведь больше ничего нет? | |
|
|
|
|
|
|
|
для: Владимир55
(15.12.2007 в 11:41)
| | ачуметь... почти ничего не понял... можете посоветовать литературу, где об этом можно почитать?
и как вы вообще измеряете оперативную память? нагрузку? и т.д. | |
|
|
|
|
|
|
|
для: а-я
(17.12.2007 в 17:44)
| | Потребляемую оперативную память я вычисляю путем суммирования памяти, потребляемой каждым из процессов (фактически, каждым посетителем). Исходные данные беру в Панели управления.
Там же и нагрузка на процессор по каждому текущему процессу. | |
|
|
|
|
|
|
|
для: Владимир55
(17.12.2007 в 19:33)
| | >Исходные данные беру в Панели управления.
Т.е. у Вас есть только веб-интерфейс? Хорошо бы видеть реальный вывод системных команд: top, free и т.п. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(17.12.2007 в 23:03)
| | У меня только панель ISP VDS manager. А top, free - это, неверное, выше. | |
|
|
|
|
|
|
|
для: Владимир55
(17.12.2007 в 23:08)
| | Чтобы понять что происходит выводы этих команд нужно мониторить в течении периода времени.
Как я понял, Apache-статус у Вас есть.
Какое кол-во запросов он обслуживает одновременно? И сколько процессов при этом запущено.
Т.е. какое сколько реально работают, а сколько простаивают занимая память? | |
|
|
|
|
|
|
|
для: Владимир55
(15.12.2007 в 11:41)
| | А скольк памяти потребляет MySQL? Этот товарищ тоже прожорив.
Сколько памяти он может потребить можно расчитать по формуле
Used MySQL memory = key_buffer + max_connections * (join_buffer + record_buffer +
sort_buffer + thread_stack + tmp_table_size)
|
key_buffer известен, а вот сколько у Вас разрешено max_connections и размеры буферов. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(17.12.2007 в 23:12)
| | Базы у меня практически отсутствуют. Разве только счетчик, но сейчас и он обнулен. В панели есть название процесса mysqld, и этот процесс занимает 5,54 Мб. | |
|
|
|