Detailed explanation of PHP memory leak
Memory leak refers to the phenomenon that memory is applied for during the running of the program, but is not released in time after the use is completed. For ordinary programs with short running time, the problem may not be so obvious, but for long-running programs This is more obvious for programs such as web servers, background processes, etc. As the system runs, the memory occupied will continue to rise, and may crash due to excessive memory usage, or be killed by the system (OOM).
Memory leaks in PHP
PHP is a high-level language. There is no concept of memory at the language level. There is no need to actively apply for or release memory during use, so at the PHP user code level it is There is no concept of memory leak anymore.
If your PHP program has a memory leak, or large variables are not released in time, then there is a problem with the implementation of the third-party extension itself.
Memory leak caused by PHP-FPM
Here is a brief introduction to the working principle of nginx+php-fpm mode:
The nginx server forks out n child processes (workers), and the php-fpm manager forks out n child processes.
When there is a user request, a worker of nginx receives the request and throws the request into the socket.
php-fpm The idle sub-process listens to requests in the socket, receives and processes the requests.
Here we should focus on the third step. The third step involves the php-fpm process life cycle. The life cycle of a php-fpm is roughly like this: module initialization (MINIT) -> module activation (RINIT) -> request processing -> module deactivation (RSHUTDOWN) -> module activation (RINIT) -> Request processing -> Module deactivation (RSHUTDOWN)...... Module activation (RINIT) -> Request processing -> Module deactivation (RSHUTDOWN) -> Module shutdown (MSHUTDOWN). In the life cycle of a php-fpm process, there will be multiple module activation (RINIT) -> request processing -> module deactivation (RSHUTDOWN) processes. The general process of this "request processing" is as follows: PHP reads the corresponding PHP file, performs lexical analysis on it, generates opcode, and the zend virtual machine executes the opcode.
The memory_limit in the PHP configuration file actually limits only the memory of this "request processing". Therefore, this parameter has nothing to do with the memory occupied by the php-fpm process.
So, is there any way to prevent this problem?
There is a parameter pm.max_requests in php-fpm.conf, which is equivalent to PHP_FCGI_MAX_REQUESTS. This value means how many requests an fpm process handles before it is automatically killed and a new process is started.
Memory leak debugging and tools
Memory leaking programs are usually easy to find, because the symptoms are manifested as continuous growth of memory usage. After discovering that memory continues to grow, we need to determine what is causing it. If a memory leak occurs, you often need to use some tools to help trace it. We can use two tools: PHP built-in memory leak detection and valgrind memory leak analysis.
Related recommendations:
Example sharing of JavaScript memory leak handling methods
##PHP kernel-picture of memory leak and new garbage collection mechanism Article introduction
What is a memory leak and the causes and prevention methods of memory leaks
The above is the detailed content of Detailed explanation of PHP memory leak. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.
