Home  >  Article  >  Backend Development  >  Solve the problem of memory exhaustion caused by too many php-fpm processes under Linux_php example

Solve the problem of memory exhaustion caused by too many php-fpm processes under Linux_php example

韦小宝
韦小宝Original
2017-12-04 13:10:021873browse

This article mainly introduces how to solve the problem of memory exhaustion caused by too many processes in php-fpm under Linux. Friends who need to understand php-fpm can refer to this article to learn. Let’s talk about how to solve the problem of memory exhaustion due to too many processes in php-fpm.

Recently, I found that the Linux server and database service of my personal blog often hung up, requiring a restart before normal access. It was extremely disgusting, so I decided to start solving the problem and free up my time and energy (I don’t want to be out of service often) problem, and then manually restart, which is laborious and time-consuming).

Analyze the problem

After discovering the problem, first use the free -m command to check the current server execution status:

You can see that my server memory is 2G, but currently there is only 70M of available memory left, and the memory usage is as high as 92%. It is very likely that the memory usage is too high. The database service hangs up.

Continue to see the details, use the top command:

Then look at the process details listed in the command output, Focus on the memory usage ratio in column 10:

It is found that the CPU usage is not high, and the CPU problem is also ruled out. In addition, you can see that the database service takes up 15.2%. Memory, when the memory usage is too high, it will crowd out the database process (the process that takes up the most memory), causing the service to hang up, so we need to check the detailed memory usage. Which processes consume so much memory?

Use command:


ps auxw|head -1;ps auxw|sort -rn -k4|head -40


View the top 40 processes that consume the most memory:

Looking at the memory usage ratio in the fourth column, we found that in addition to the mysql database service, the php-fpm service pool opened too many child processes and occupied more than half of the memory. Problem Found it, let's start to solve the problem: set and control the number of php-fpm process pool processes.

Solve the problem

Through various search methods, we found that we can configure pm.max_children Properties, control the number of php-fpm sub-processes. First, open the php-fpm configuration file and execute the command:


vi /etc/php-fpm.d/www.conf


Find the pm.max_children field and found that its value is too large:

As shown in the figure, pm The value of .max_children is 50. Each process occupies 1%-2.5% of the memory, which adds up to more than half of the memory, so we need to reduce its value. The blogger here sets it to 25. At the same time, check The following two attributes:

pm.max_spare_servers: This value indicates the maximum number of idle processes guaranteed. If the idle processes are greater than this value, this will be cleaned up pm.min_spare_servers : Guarantee the minimum number of idle processes. If the idle process is less than this value, a new child process will be created;

Neither of these two values ​​can be greater than the pm.max_children value, which is usually setpm.max_spare_servers The value is 60%-80% of the pm.max_children value.

Finally, restart php-fpm


systemctl restart php-fpm


Check the memory usage again, the memory usage is reduced a lot:

After observing the memory usage many times, I found that after this improvement, the server memory resource consumption has been greatly alleviated.

ps: Check the number of processes opened by php-fpm and the memory limit of each process

1. Check the total number of processes opened on the server through the command How many php-cgi processes are there


 ps -fe |grep "php-fpm"|grep "pool"|wc -l


2. Check how many php-cgi processes are used to handle tcp requests


 netstat -anp|grep "php-fpm"|grep "tcp"|grep "pool"|wc -l


3. Memory limit of each php-fpm process in linux+nginx+php environment

Setting method:

Edit the php-fpm.conf configuration file

php_admin_value[memory_limit] = 128M (The configuration file on my server is in /etc/php5/fpm/pool.d/www.conf. This file is included in php-fpm.conf) The following numbers can be arbitrary Change: 32M, 64M, 128M, 256M, 512M. This setting can be written according to your server memory size and your needs. After modification, you need to load the php-fpm service.

Summary

The above is the solution to the problem of memory exhaustion caused by too many php-fpm processes under Linux introduced by the editor. I hope to be helpful.

Related recommendations:

How to turn on status statistics in php-fpm

Sharing sample code explained by php-fpm

Introducing solutions to reduce PHP-FPM memory usage

The above is the detailed content of Solve the problem of memory exhaustion caused by too many php-fpm processes under Linux_php example. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn