Из-за чего повышенное потребление памяти на VPS?
==================================================

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

Есть скрипт загрузки пользователями изображений (предполагается до 10Мб), загрузка происходит  

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

расширения Imagick и график потребления памяти в панели хостинга растет ступенеобразно, было даже два падения VPS с ошибками в логе типа: Cannot allocate memory: fork: Unable to fork new process и PHP Fatal error: Out of memory (allocated 262144) (tried to allocate 261900 bytes) in Unknown on line 0. В этот момент тарифный план включал в себя 512 Mb (1024 Mb burst). Сервак падал при достижении гигабайта. Также периодически операция аплода для немаленьких файлов 5-7 Мб заканчивалась POST-ошибкой в консоль браузера.  

По совету хостера был произведен апгрейд на 1024 Mb (2048 Mb burst) и файлы стали аплодиться и обрабатываться без ошибок, но память по-прежнему растет после каждой сессии загрузки файлов (5-7 штук) и не снижается впоследствии. Складывается ощущение, что рано или поздно она достигнет предела и все рухнет. Это при том условии, что не было еще релиза проекта и файлы аплодит 1 человек.  

Собственно вопрос: в чем может быть проблема?   

В использовании imagick или конфигах? Есть вариант поковырять конфиги, но не очень понятно пока что конкретно. Думаю о maxrequestsperprocess, maxprocesses и установке ulimit -s 1024. Или искать альтернативу imagick?  

Заранее благодарен всем откликнувшимся. 

 У вас openvz с некорректно настроенными лимитами на память. Просто переехайте на любую Xen/KVM виртуалку - digitalocean, flops, например.   

Найти openvz-хостера с корректными лимитами на память посложнее будет. 

 Спасибо за ответ, в данный момент все лежит на IntoVPS, который был выбран после некоторого количества прочтенных положительных отзывов. Выбирал между им и Hetzner'ом. Проще уехать, чем разобраться и договориться с хостером и его настройками? 

 Небольшой отчет по тестам на Digitalocean. Взял 512MB и залил скрипты. Произвожу аналогичные действия — картинка аплодится, после чего скрипт делает кроп и создание двух миниатюр с использованием расширения Imagick. Гляжу память известным мне способом через free -m.  

Состояние памяти до работы скрипта:  

 total used free shared buffers cached  

Mem: 495 218 276 0 2 127  

-/+ buffers/cache: 89 406  

Swap: 0 0 0  
  

После чего закидываю файл на загрузку и иду снова в шелл и начинаю усердно задрачивать free -m.  

В момент загрузки файла особо ничего не меняется, после загрузки, очевидно начинают работать мои кропы и рисайзы, память резко подскакивает до пикового значения в 486 Мб.  
  

used free shared buffers cached  

495 490 5 0 2 263  

224 271  

0 0 0  
  

И также резко опускается вниз. В данный момент спустя некоторое время работы скрипта уровень памяти вот такой.  
  

total used free shared buffers cached  

495 103 392 0 0 18  

84 411  

0 0 0  
  

У Digitalocean нет графиков для памяти, поэтому похвастаться красивой картинкой не могу, но ситуация с памятью мне видится иной, чем на IntoVPS. 

 Сделайте профайлинг приложения по потреблению памяти и увидите кто или что её скушало. 

 Несколькими сессиями загрузки файлов скушал и 2 Гб в течение часа вчера вечером.   

На графике видно. Потребление памяти до сих пор на этом уровне.![0o29.png](https://imagizer.imageshack.us/v2/648x303q90/547/0o29.png) 

[@rivalsm](user/rivalsm)   

Прочитайте мой ответ к [Повышенное потребление памяти на VPS](http://toster.ru/q/64894#answer_226080)  

Ваше приложение может некорректно работать с памятью (не высвобождать её или ещё как-то некорректно себя вести), но Linux давно уже способен самостоятельно справляться с подобными ситуациями. В крайнем случае - всегда есть OOM, который сделает kill -9 части процессов и память снова появится. Cannot allocate memory означает то, что ваша виртуалка на самом деле не имеет указанного количества \_физической\_ памяти.   

Сначала переезжайте на kvm, потом продолжайте копаться с приложением.   
  

Ситуация "вся память занята" - абсолютно нормальна, и это не повод к "Cannot allocate memory" при форке. 

 Результаты работы с памятью из мониторикса. В месте, где виден продолжительный подъем производились последовательные аплоды в течение некоторого промежутка времени.  

В общем и целом из free видно, что уровень свободной памяти за вычетом бкферов и кэшей  

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

что проблема была у хостера IntoVPS. По всей видимости, Влад [@inkvizitor68sl](user/inkvizitor68sl) оказался прав, за что ему огромное спасибо, а то я уже начал рвать волосы на голове и собирался идти к гадалке за выяснением причин возникновения проблемы.  
![liih.png](https://imagizer.imageshack.us/v2/895x367q90/835/liih.png) 

 У вас, похоже, OpenVZ.  

А сделайте-ка ulimit -s 1024 и перезапустите все демоны.