상황 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 개발에서 데이터베이스 작업을 모니터링하는 데 사용됩니다: DB::listen(function ($query) {
// query−>sql//query−>sql//query->bindings
// $query->time });
Solution: # 🎜 🎜#이 예제에서는 실행된 모든 SQL 문 레코드를 가져와 로그에 기록하기 위해 DB::listen 메서드를 사용해야 합니다. 그러나 이 메서드는 개발 환경에서는 문제가 되지 않습니다. 프로덕션 환경에서는 실행된 SQL 문을 얻고 로그를 작성하는 다른 방법을 비활성화하고 대신 사용해야 합니다.
추천 튜토리얼
PHP 비디오 튜토리얼위 내용은 PHP 메모리 누수가 발생하면 어떻게 되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!