이 글의 내용은 php.ini 설정 튜닝에 관한 내용으로, 어느 정도 참고할만한 가치가 있습니다. 이제 모두와 공유하겠습니다. 필요한 친구들이 참고할 수 있습니다.
기본적으로 설치되는 PHP는 학과에서 구매하는 일반 PHP와 같습니다. 그 양복은 딱 맞았지만 완벽하지는 않았습니다. Tuned PHP는 정확한 치수와 일치하는 맞춤 제작 슈트와 같습니다. 그러나 PHP 튜닝은 PHP 성능과 효율성을 향상시키기 위한 수단일 뿐이며 잘못된 코드와 응답하지 않는 API 호출을 수정할 수는 없다는 점에 유의해야 합니다.
PHP 인터프리터는 php.ini
파일에서 구성되고 조정됩니다. 이 파일의 위치는 운영 체제마다 다르며 일반 명령줄은 php.ini와 PHP-FPM에 해당하는 php.ini
파일은 별개입니다. 여기서는 PHP-FPM에 해당하는 php.ini가 구성되어 있다고 가정하지만, 아래 설명된 최적화 조치는 모든 php.ini
에 적용됩니다. php.ini
文件中配置和调优,这个文件在不同操作系统中的位置有所不同,而且一般命令行对应的 php.ini
和 PHP-FPM 对应的 php.ini
文件是分开的。这里我们假设配置的是 PHP-FPM 对应的 php.ini,但是下面讲的优化措施适用于所有php.ini
。
注:我们首先应该使用 PHP Iniscan工具扫描 php.ini,检查使用了安全方面的最佳实践。
运行 PHP 时需要关心每个 PHP 进程要使用多少内存, php.ini
中的 memory_limit
设置用于设定单个 PHP 进程可以使用的系统内存最大值。
这个设置的默认值是 128M
,这对于大多数中小型 PHP 应用来说或许合适,不过,如果运行的是微型 PHP 应用,可以降低这个值,以便节省系统资源,反之,如果运行的是内存集中型 PHP 应用,可以增加这个值。这个值的大小由可用的系统内存决定,确定给 PHP 分配多少值是一门艺术,决定给 PHP 分配多少内存,以及能负担起多少个 PHP-FPM 进程时,可以根据以下维度信息进行判断:
一共可以分配给 PHP 多少内存?以一个 2G 内存的 VPS 为例,这台设备中可能还运行了其他进程,如 MySQL、Nginx 等,那么留 512M 给 PHP 是合适的。
每个 PHP 进程平均耗费多少内存?这个要监控进程的内存使用量,可以使用命令行命令 top,也可以在 PHP 脚本中调用memory_get_peak_usage()
php.ini
의 memory_limit
설정을 사용하여 메모리 양을 설정합니다. 단일 PHP 프로세스가 사용할 수 있는 최대 시스템 메모리 양입니다.
이 설정의 기본값은 128M
이며 대부분의 중소 규모 PHP 애플리케이션에 적합할 수 있습니다. 그러나 마이크로 PHP 애플리케이션을 실행하는 경우 이 값을 다음으로 낮출 수 있습니다. 반면에 메모리 집약적인 PHP 애플리케이션을 실행하는 경우 이 값을 늘릴 수 있습니다. 이 값의 크기는 사용 가능한 시스템 메모리에 따라 결정됩니다. PHP에 할당할 값을 결정하는 것은 예술입니다. PHP에 할당할 메모리 양과 감당할 수 있는 PHP-FPM 프로세스 수를 결정할 때 이를 기준으로 판단할 수 있습니다. 다음 차원 정보에 대해:
총 얼마나 많은 메모리를 PHP에 할당할 수 있습니까? 2G 메모리가 있는 VPS를 예로 들면 이 장치는 MySQL, Nginx 등과 같은 다른 프로세스도 실행할 수 있으므로 PHP용으로 512M을 남겨 두는 것이 적절합니다. 각 PHP 프로세스는 평균적으로 얼마나 많은 메모리를 소비합니까? 프로세스의 메모리 사용량을 모니터링하려면 명령줄 명령 top을 사용하거나 PHP 스크립트에서
memory_get_peak_usage()
함수를 호출할 수 있습니다. 어떤 방법을 사용하든 동일한 스크립트가 필요합니다. 여러 번 실행한 다음 평균 메모리 소비량을 계산합니다. opcache.revalidate_freq = 0: PHP 스크립트의 내용이 변경되었는지 확인하는 빈도(초)를 설정합니다. 0초로 설정한다는 의미는 opcache.validate_timestamps를 1로 설정해야만 요청이 있을 때마다 PHP 파일의 유효성을 다시 검사한다는 뜻이지만, 개발 환경에서는 매번 PHP 파일의 유효성을 다시 검사하게 됩니다. 프로덕션 환경에서는 확인하지 마세요.
opcache.fast_shutdown = 1: 이 설정을 사용하면 opcode가 더 빠른 종료 단계를 사용하여 객체 파괴 및 메모리 해제를 Zend 엔진의 메모리 관리자에 맡길 수 있습니다.
애플리케이션에서 파일 업로드를 허용하는 경우 업로드할 수 있는 최대 파일 크기를 설정하는 것이 가장 좋습니다. 또한 동시에 업로드할 수 있는 최대 파일 수를 설정하는 것이 가장 좋습니다.
file_uploads = 1upload_max_filesize = 10Mmax_file_uploads = 3
1
2
3
기본적으로 PHP는 단일 요청 20개 파일, 최대 업로드 파일은 2MB입니다. 여기서는 단일 요청이 최대 3개 파일만 업로드할 수 있도록 설정했으며 각 파일은 최대 10MB일 수 있습니다. 이 값을 너무 크게 설정하지 마십시오. 그렇지 않으면 시간 초과가 발생합니다. 발생하다.
참고: 대용량 파일을 업로드해야 하는 경우 이에 따라 웹 서버 구성을 조정해야 합니다. php.ini에서 설정하는 것 외에도 Nginx 가상 호스트 구성에서 client_max_body_size 설정을 조정합니다.
php.ini 파일의 max_execution_time은 단일 PHP 프로세스가 종료되기 전에 실행할 수 있는 최대 시간을 설정하는 데 사용됩니다. 이 설정의 기본값은 30초이며 5초로 설정하는 것이 좋습니다.
max_execution_time = 5
max_execution_time = 5
注:在 PHP 脚本中可以调用 set_limit_time() 函数覆盖这个设置。
假设我们想要生成报告,并把结果制作成 PDF 文件,这个任务可能要花 10 分钟才能完成,而我们肯定不想让 PHP 请求等待 10 分钟,我们应该单独编写一个 PHP 文件,让其在单独的后台进程中执行,Web 应用只需几毫秒就可以派生一个单独的后台进程,然后返回 HTTP 响应:
<?phpexec('echo "create-report.php" | at now');echo 'report pending...';
1
2
3
create-report.php
session.save_handler = 'memcached'session.save_path = '127.0.0.1:11211'2
3
create-report.php
는 별도의 백그라운드 프로세스에서 실행되며, 실행 후 데이터베이스를 업데이트하거나 이메일을 통해 수신자에게 보고서를 보낼 수 있습니다. 그러나 이러한 사용은 드물며, 보안, 확장성 및 유지 관리 측면에서 유사한 기능을 구현하는 경우 PHPResque 등이 더 좋습니다. 세션 처리PHP의 기본 세션 핸들러는 세션 데이터를 하드 디스크에 저장하여 불필요한 디스크 I/O를 생성하고 시간을 낭비하기 때문에 대규모 애플리케이션의 속도를 저하시킬 수 있습니다. 예를 들어 Memcached 또는 Redis를 사용하여 세션 데이터를 메모리에 보관해야 합니다. 이는 나중에 확장하기가 더 쉽다는 추가 이점이 있습니다. 세션 데이터가 하드 디스크에 저장되어 있으면 추가 서버를 추가하는 것이 불편합니다. 세션 데이터가 Memcached나 Redis에 저장되어 있으면 분산된 PHP-FPM 서버라면 누구나 세션 데이터에 접근할 수 있습니다. Memcached에 세션 데이터를 저장하려면 다음을 구성해야 합니다.
output_buffering = 4096implicit_flush = false2
realpath_cache_size = 64K
위 내용은 php.ini 구성 조정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!