How to optimize the php process memory usage?

后端 未结 2 652
生来不讨喜
生来不讨喜 2020-12-10 14:40

I am running a wordpress site and each PHP process usage about 200mb to 250mb resident size memory. With 16GB of ram, the server can only handle about 70 processes. By incre

相关标签:
2条回答
  • 2020-12-10 15:04

    Rasmus Lerdorf did a conference about PHP performance at Confoo in 2010 and he used a Wordpress blog as an example, this should give you great tools to answer your question:

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

    To sum up:

    • 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.

    I would definitely start by disabling PHP extensions if possible.

    0 讨论(0)
  • 2020-12-10 15:09

    I'll summarize what Lisa did to find the problem:

    • 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

    0 讨论(0)
提交回复
热议问题