Home  >  Article  >  Backend Development  >  How to solve the problem that php-fpm runs out of memory due to too many processes in Linux

How to solve the problem that php-fpm runs out of memory due to too many processes in Linux

php中世界最好的语言
php中世界最好的语言Original
2017-12-20 14:11:521653browse

I found that in the Linux service of my personal blog, the database service often cannot be used and must be restarted before it can be accessed normally, so I will bring you a solution to this problem.

Analyze the problem

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


You can see my The 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 database service hangs up due to high memory usage.

Continue to look at the details, use the top command:


Then look at the detailed process status listed in the command output, focusing on the 10th column of memory Usage ratio:


#It is found that the CPU usage is not high, and the CPU problem is also ruled out. In addition, it can be seen that the database service occupies 15.2% of the memory, and the memory usage is too high. 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, occupying more than half of the memory. The problem was found, and we started to solve the problem: Settings Control the number of php-fpm process pool processes.

Solve the problem

Through various search means, we found that we can control the number of php-fpm child processes by configuring pm.max_children property, first of all , open the php-fpm configuration file, 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, the value of pm.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 main here sets it to 25. At the same time, check the following two properties:

pm.max_spare_servers: This value indicates the guaranteed maximum number of idle processes. 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, create a new child process;

Neither value can be greater than the pm.max_children value, usually set the pm.max_spare_servers value to pm.max_children 60%-80% of the 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, we 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. Use the command to check how many php-cgi processes are opened on the server

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


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

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


3.linux+nginx+php environment, the memory limit of each php-fpm process

Setting method:

Edit the php-fpm.conf configuration file

php_admin_value[memory_limit] = 128M (my server The configuration file is in /etc/php5/fpm/pool.d/www.conf. This file is included in php-fpm.conf) The following numbers can be changed at will: 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.


# I believe you have mastered the methods after reading these cases. For more exciting information, please pay attention to other related articles on the php Chinese website!

Related reading:

Detailed explanation of examples of binary search and binary search in java algorithm

Detailed explanation of binary search in javascript _javascript skills

javascript Find the position of characters in an array by half (ordered list)_javascript skills

The above is the detailed content of How to solve the problem that php-fpm runs out of memory due to too many processes in Linux. 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