상황 1. 프로그램 운영 데이터가 너무 큽니다
시나리오 복원 : PHP의 사용 가능한 메모리 한도를 한 번에 초과하는 데이터를 읽으면 메모리가 소모됩니다
<?php ini_set('memory_limit', '128M'); $string = str_pad('1', 128 * 1024 * 1024);
Solution:
<?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);
사례 2, 빅데이터를 기반으로 프로그램을 실행할 때 복사본이 생성됩니다#🎜🎜 ##🎜🎜 #시나리오 복원: 실행 중 큰 변수가 복사되어 메모리가 부족했습니다.
<?php ini_set("memory_limit",'1M'); $string = str_pad('1', 1* 750 *1024); $string2 = $string; $string2 .= '1';
해결책:
쓸데없는 변수를 조기에 해제하거나 원본 데이터를 참조 형식으로 조작하세요.
<?php ini_set("memory_limit",'1M'); $string = str_pad('1', 1* 750 *1024); $string2 = $string; unset($string); $string2 .= '1';
시나리오 3,
불합리한 구성 시스템 자원 고갈시나리오 복원: 불합리한 구성으로 인해 결과적으로 메모리가 충분하지 않습니다. 2G 메모리 시스템에서 시작할 수 있는 최대 php-fpm 하위 프로세스 수는 100개이지만 실제로 50개의 php-fpm 하위 프로세스를 시작한 후에는 더 이상 프로세스를 시작할 수 없습니다. #🎜🎜 ##### 🎜🎜#Solution:#🎜🎜 ## 🎜🎜 ## 🎜🎜##Tere set_max_size, max_file_uploads, upload_max_filesize, max_input_vars Vel 및 기타 매개변수를 설정하고 PHP-FPM 관련 매개변수를 조정합니다.
상황 4. 쓸데없는 데이터가 제때 공개되지 않음
시나리오 복원: 이 문제는 프로그램 로직 측면에서는 문제가 되지 않지만, 쓸모없는 데이터가 많은 양의 메모리를 차지하므로 코드를 목표한 방식으로 최적화해야 합니다.
다음 코드는 Laravel 개발에서 데이터베이스 작업을 모니터링하는 데 사용됩니다: 추천 튜토리얼 위 내용은 PHP 메모리 누수가 발생하면 어떻게 되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!DB::listen(function ($query) {
// query−>sql//query−>sql//query->bindings
// $query->time });