What happens when php memory leaks?
Situation 1. The program operation data is too large
Scenario restoration: One-time reading exceeds the upper limit of PHP's available memory The data causes the memory to run out
<?php ini_set('memory_limit', '128M'); $string = str_pad('1', 128 * 1024 * 1024);
Solution:
1. Problems that can be solved with money are not problems. If the program needs to read large files There are not many opportunities, and the upper limit is predictable, then use ini_set('memory_limit', '1G'); to set a larger value or memory_limit=-1. If you have enough memory, you can keep the program running.
2. If the program needs to be able to be used normally on a small memory machine, then the program needs to be optimized. As shown below, the code is much more complicated.
<?php //php7 以下版本通过 composer 引入 paragonie/random_compat ,为了方便来生成一个随机名称的临时文件 require "vendor/autoload.php"; ini_set('memory_limit', '128M'); //生成临时文件存放大字符串 $fileName = 'tmp'.bin2hex(random_bytes(5)).'.txt'; touch($fileName); for ( $i = 0; $i < 128; $i++ ) { $string = str_pad('1', 1 * 1024 * 1024); file_put_contents($fileName, $string, FILE_APPEND); } $handle = fopen($fileName, "r"); for ( $i = 0; $i <= filesize($fileName) / 1 * 1024 * 1024; $i++ ) { //do something $string = fread($handle, 1 * 1024 * 1024); } fclose($handle); unlink($fileName);
Situation 2, Copies are generated when the program operates on big data
Scenario restoration: large variables during execution A copy was made, resulting in insufficient memory.
<?php ini_set("memory_limit",'1M'); $string = str_pad('1', 1* 750 *1024); $string2 = $string; $string2 .= '1';
Solution:
Release useless variables early, or operate the original data in the form of references.
<?php ini_set("memory_limit",'1M'); $string = str_pad('1', 1* 750 *1024); $string2 = $string; unset($string); $string2 .= '1';
Scenario 3. Unreasonable configuration and system resource exhaustion
Scenario restoration: insufficient memory due to unreasonable configuration, 2G memory machine The above setting can start up to 100 php-fpm sub-processes, but after actually starting 50 php-fpm sub-processes, no more processes can be started.
Solution:
Reasonably set parameters such as post_max_size, max_file_uploads, upload_max_filesize, max_input_vars, max_input_nesting_level and tune php-fpm related parameters.
Situation 4. Useless data is not released in time
Scenario restoration: This problem is not logical from the program logic Problem, but useless data takes up a lot of memory and leads to insufficient resources. Targeted code optimization should be done.
The following code is used to monitor database operations in Laravel development:
DB::listen(function ($query) { // query−>sql//query−>sql//query->bindings // $query->time });
Solution:
In this case, pass DB The ::listen method obtains records of all executed SQL statements and writes them to the log. However, this method has a memory leak problem. It does not matter in the development environment. In the production environment, it should be disabled and other methods are used to obtain the executed SQL statements and write them. log.
Recommended tutorial;PHP video tutorial
The above is the detailed content of What happens when php memory leaks?. 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

AI Hentai Generator
Generate AI Hentai for free.

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

In this chapter, we will understand the Environment Variables, General Configuration, Database Configuration and Email Configuration in CakePHP.

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

To work with date and time in cakephp4, we are going to make use of the available FrozenTime class.

To work on file upload we are going to use the form helper. Here, is an example for file upload.

In this chapter, we are going to learn the following topics related to routing ?

CakePHP is an open-source framework for PHP. It is intended to make developing, deploying and maintaining applications much easier. CakePHP is based on a MVC-like architecture that is both powerful and easy to grasp. Models, Views, and Controllers gu

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

Validator can be created by adding the following two lines in the controller.
