Вопрос по linux, php – Как оптимизировать использование памяти процессом php?

10

Я работаю на WordPress сайте, и каждый процесс PHP использует от 200 до 250 Мб памяти. С 16 ГБ оперативной памяти сервер может обрабатывать только около 70 процессов. Увеличивая виртуальную память до 16 ГБ, она может обрабатывать 140. После этого нагрузка продолжает расти. Если за 10 минут будет 200 подключений, нагрузка на сервер достигнет 20 на четырехъядерном процессоре Xeon 3 ГГц!

Я попытался деактивировать все плагины, но это только уменьшает использование памяти PHP каждого процесса менее чем на 10%. suPHP сообщает мне, какой пользователь использует столько памяти, но не какую часть кода WordPress.

Любое предложение о том, как уменьшить использование памяти? Или мой единственный вариант обновления до 32 ГБ оперативной памяти?

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
10585 nobody    16   0 2266m 237m 199m S 21.3  1.5   1:09.17 /usr/bin/php
10597 nobody    16   0 2257m 255m 226m S 15.3  1.6   0:17.56 /usr/bin/php

Самые большие результаты из pmap -d

000000000e8b8000   27580 rw--- 000000000e8b8000 000:00000   [ anon ]
00002b3772850000 2097152 rw-s- 0000000000000000 000:00009   [ shmid=0x2d1b803a ]
00002b37f2a62000   55108 r---- 0000000000000000 0fd:00000 locale-archive
mapped: 2320852K    writeable/private: 30012K    shared: 2097152K

выход ipcs

------ Semaphore Arrays --------

key        semid      owner      perms      nsems
0x000000a7 0          root      600        1
0x00000000 162529281  nobody    600        1
0x00000000 162562050  nobody    600        1
0x00000000 162594819  nobody    600        1
0x00000000 162627588  nobody    600        1
------ Message Queues --------

key        msqid      owner      perms      used-bytes   messages`
Вы уже пробовали установить APC или аналогичное решение для кэширования кода операции? raina77ow
@strkol cpanel пока не предоставляет 5.4. Обратный прокси как лак уменьшает нагрузку и заставляет сервер обрабатывать больше трафика. Но я не помогу найти причину проблемы. Что-то заставляет PHP потреблять от 200 до 250 МБ памяти RSS, я просто не знаю, как его найти. Спасибо за совет. Lisa
Да. Я использую eAccelerator и Zend Optimizer. APC в настоящее время не входит в cPanel. Два других могут быть скомпилированы с easyapache. Lisa
@Lisa, не могли бы вы вставить вывод pmap -d & lt; pid-of-php & gt ;? strkol
Это странно, я использую некоторые хостинг-серверы, и большинство экземпляров PHP потребляют от 7 до 50 МБ памяти RSS. Мои предложения: 1. Обновите до php 5.4 (из-за уменьшенного объема памяти). 2. Установите несколько обратных прокси (например, лака) перед WordPress. strkol

Ваш Ответ

2   ответа
7

Check the memory layout of a single PHP process with pmap -d <pid>. The output showed that there's a huge amount of shared memory used by the process:
00002b3772850000 2097152 rw-s- 0000000000000000 000:00009   [ shmid=0x2d1b803a ]
Examine the shared memory regions with ipcs -m. It showed that there are a lot of shared memory regions created by user nobody (the web server), here are just a few of them:
0x00000000 117964807 nobody 600 2147483648 1 dest 
0x00000000 117997576 nobody 600 2147483648 1 dest 
0x00000000 118030345 nobody 600 2147483648 1 dest
0x00000000 118063114 nobody 600 2147483648 1 dest
Disable eAccelerator in php.ini and remove the created shared memory regions:

for i in `ipcs -m | cut -d' ' -f2 | grep '^[0-9]'`; do ipcrm -m $i; done

3

2010 году, и он использовал блог Wordpress в качестве примера. Это должно дать вам отличные инструменты для ответа на ваш вопрос:

http://talks.php.net/show/confoo10/1

Подводить итоги:

Run a phpinfo() and disable PHP extensions that you don't use. They can take a lot of memory (imagick, curl, ...) Generate a graph of your includes using the inclued.so extension. You might load useless functions in your wordpress setup. Run benchmarks with siege. Sometimes, tiny optimisations have great impact on performance, so make sure you have metrics, to help you make your decisions. Use callgrind to show where you're loosing performance. In one of my project I was using md5() to hash my SQL queries and cache them. The md5() calls where using 20% of the CPU time.

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Lisa
Error: User Rate Limit Exceeded

Похожие вопросы