>  기사  >  백엔드 개발  >  php.ini 구성 조정

php.ini 구성 조정

不言
不言원래의
2018-04-26 11:21:131636검색

이 글의 내용은 php.ini 설정 튜닝에 관한 내용으로, 어느 정도 참고할만한 가치가 있습니다. 이제 모두와 공유하겠습니다. 필요한 친구들이 참고할 수 있습니다.

기본적으로 설치되는 PHP는 학과에서 구매하는 일반 PHP와 같습니다. 그 양복은 딱 맞았지만 완벽하지는 않았습니다. Tuned PHP는 정확한 치수와 일치하는 맞춤 제작 슈트와 같습니다. 그러나 PHP 튜닝은 PHP 성능과 효율성을 향상시키기 위한 수단일 뿐이며 잘못된 코드와 응답하지 않는 API 호출을 수정할 수는 없다는 점에 유의해야 합니다.

php.ini 파일

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 Iniscan 도구를 사용하여 php.ini를 검사하여 보안 모범 사례가 사용되는지 확인해야 합니다.
  • Memory
  • PHP를 실행할 때 각 PHP 프로세스가 사용하는 메모리 양에 주의해야 합니다. php.inimemory_limit 설정을 사용하여 메모리 양을 설정합니다. 단일 PHP 프로세스가 사용할 수 있는 최대 시스템 메모리 양입니다.


    이 설정의 기본값은 128M이며 대부분의 중소 규모 PHP 애플리케이션에 적합할 수 있습니다. 그러나 마이크로 PHP 애플리케이션을 실행하는 경우 이 값을 다음으로 낮출 수 있습니다. 반면에 메모리 집약적인 PHP 애플리케이션을 실행하는 경우 이 값을 늘릴 수 있습니다. 이 값의 크기는 사용 가능한 시스템 메모리에 따라 결정됩니다. PHP에 할당할 값을 결정하는 것은 예술입니다. PHP에 할당할 메모리 양과 감당할 수 있는 PHP-FPM 프로세스 수를 결정할 때 이를 기준으로 판단할 수 있습니다. 다음 차원 정보에 대해:

총 얼마나 많은 메모리를 PHP에 할당할 수 있습니까? 2G 메모리가 있는 VPS를 예로 들면 이 장치는 MySQL, Nginx 등과 같은 다른 프로세스도 실행할 수 있으므로 PHP용으로 512M을 남겨 두는 것이 적절합니다.

각 PHP 프로세스는 평균적으로 얼마나 많은 메모리를 소비합니까? 프로세스의 메모리 사용량을 모니터링하려면 명령줄 명령 top을 사용하거나 PHP 스크립트에서 memory_get_peak_usage() 함수를 호출할 수 있습니다. 어떤 방법을 사용하든 동일한 스크립트가 필요합니다. 여러 번 실행한 다음 평균 메모리 소비량을 계산합니다.
  • PHP-FPM 프로세스를 몇 개까지 감당할 수 있나요? PHP에 512M 메모리를 할당하고 각 PHP 프로세스가 평균 15M 메모리를 소비한다고 가정하면 34개의 PHP-FPM 프로세스를 감당할 수 있습니다.
  • 시스템 리소스가 충분합니까? 마지막으로, PHP 애플리케이션을 실행하고 예상 트래픽을 처리하기에 충분한 시스템 리소스가 있는지 확인해야 합니다.
  • 참고: Apache Bench 또는 Siege를 사용하여 프로덕션 환경과 유사한 조건에서 PHP 애플리케이션을 스트레스 테스트하여 프로덕션 환경에 사용 가능한 리소스가 충분한지 확인해야 합니다.

    🎜Zend OPcache🎜🎜할당할 메모리 양을 결정한 후 PHP의 Zend OPcache 확장을 구성할 수 있습니다. 이 확장에 대한 자세한 내용은 다음 문서를 참조하세요: http://laravelacademy.org/post/4396.html. 🎜🎜PHP 5.5.0+에는 이 확장이 내장되어 있습니다. 다음은 php.ini 파일에서 Zend OPcache 확장을 구성하고 최적화하는 데 사용되는 설정입니다: 🎜🎜🎜🎜opcache.memory_consumption = 64: opcode에 할당된 메모리 캐시(단위: MB), 할당된 메모리 양은 애플리케이션의 모든 PHP 스크립트에서 컴파일된 opcode를 저장할 수 있어야 합니다. 이 값은 애플리케이션의 크기에 따라 다른 크기로 설정될 수 있습니다. 🎜🎜🎜🎜opcache.interned_strings_buffer = 16: 상주 문자열을 저장하는 데 사용되는 메모리 양(단위는 MB) 그 뒤에서 PHP 인터프리터는 동일한 문자열의 여러 인스턴스를 찾아 해당 문자열을 메모리에 저장합니다. 동일한 문자열이 다시 사용되면 PHP 인터프리터는 메모리를 절약하기 위해 포인터를 사용합니다. 기본적으로 PHP 상주 문자열은 각 PHP 프로세스에서 격리됩니다. 이 설정을 사용하면 PHP-FPM 프로세스 풀에서 모든 프로세스 상주 문자열을 공유 버퍼에 저장하여 PHP-FPM 프로세스 풀에서 처리할 수 있습니다. 여러 프로세스 간에 참조되므로 더 많은 메모리가 절약됩니다. 🎜🎜🎜🎜opcache.max_accelerated_files = 4000: opcode 캐시에 저장할 수 있는 최대 PHP 스크립트 수. 이 값의 범위는 2000에서 100000 사이입니다. 이 값은 PHP 애플리케이션의 파일 수보다 커야 합니다. . 🎜🎜🎜🎜opcache.validate_timestamps = 1: 이 설정의 값이 1이면 PHP는 일정 시간 후에 PHP 스크립트의 내용이 변경되었는지 여부를 확인합니다. 확인 간격은 opcache.revalidate_freq 설정에 의해 지정됩니다. 이 설정 값이 0이면 PHP는 PHP 스크립트의 내용이 변경되었는지 여부를 확인하지 않으며 캐시된 opcode를 직접 지워야 합니다. 개발 환경에서는 1, 프로덕션 환경에서는 0으로 설정하는 것이 좋습니다. 🎜
  • 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 = 5max_execution_time = 5

注:在 PHP 脚本中可以调用 set_limit_time() 函数覆盖这个设置。

假设我们想要生成报告,并把结果制作成 PDF 文件,这个任务可能要花 10 分钟才能完成,而我们肯定不想让 PHP 请求等待 10 分钟,我们应该单独编写一个 PHP 文件,让其在单独的后台进程中执行,Web 应用只需几毫秒就可以派生一个单独的后台进程,然后返回 HTTP 响应:

<?phpexec(&#39;echo "create-report.php" | at now&#39;);echo &#39;report pending...&#39;;
  • 1

  • 2

  • 3

create-report.php

참고: PHP 스크립트에서 set_limit_time() 함수를 호출하여 이를 재정의할 수 있습니다. 환경.

보고서를 생성하고 결과를 PDF 파일로 만들고 싶다고 가정해 보겠습니다. 이 작업은 완료하는 데 10분이 걸릴 수 있으며 PHP 요청을 10분 동안 기다리게 하고 싶지는 않습니다. 별도의 백그라운드 프로세스에서 실행되면 웹 애플리케이션은 단 몇 밀리초 만에 별도의 백그라운드 프로세스를 포크하고 HTTP 응답을 반환할 수 있습니다.

session.save_handler = &#39;memcached&#39;session.save_path = &#39;127.0.0.1:11211&#39;2

1

2

3

create-report.php는 별도의 백그라운드 프로세스에서 실행되며, 실행 후 데이터베이스를 업데이트하거나 이메일을 통해 수신자에게 보고서를 보낼 수 있습니다. 그러나 이러한 사용은 드물며, 보안, 확장성 및 유지 관리 측면에서 유사한 기능을 구현하는 경우 PHPResque 등이 더 좋습니다.

세션 처리

PHP의 기본 세션 핸들러는 세션 데이터를 하드 디스크에 저장하여 불필요한 디스크 I/O를 생성하고 시간을 낭비하기 때문에 대규모 애플리케이션의 속도를 저하시킬 수 있습니다. 예를 들어 Memcached 또는 Redis를 사용하여 세션 데이터를 메모리에 보관해야 합니다. 이는 나중에 확장하기가 더 쉽다는 추가 이점이 있습니다. 세션 데이터가 하드 디스크에 저장되어 있으면 추가 서버를 추가하는 것이 불편합니다. 세션 데이터가 Memcached나 Redis에 저장되어 있으면 분산된 PHP-FPM 서버라면 누구나 세션 데이터에 접근할 수 있습니다.

Memcached에 세션 데이터를 저장하려면 다음을 구성해야 합니다.

output_buffering = 4096implicit_flush = false2

버퍼 출력

더 많은 블록에 더 적은 데이터를 보내는 대신 더 적은 블록에 더 많은 데이터를 전송하려는 경우 네트워크는 다음과 같습니다. 즉, 더 적은 수의 조각으로 방문자의 브라우저에 콘텐츠를 전달하면 총 HTTP 요청 수를 줄일 수 있습니다.

따라서 PHP가 출력을 버퍼링하도록 해야 합니다. 기본적으로 PHP는 출력 버퍼링 기능을 활성화하여 웹 서버에 콘텐츠를 보내기 전에 4096바이트의 출력을 버퍼링합니다. 🎜
realpath_cache_size = 64K
🎜🎜 참고: 출력 버퍼 크기를 수정하려면 4(32비트 시스템) 또는 8(64비트 시스템)의 배수인 값을 사용해야 합니다. 🎜🎜🎜실제 경로 캐시🎜🎜PHP는 응용 프로그램에서 사용하는 파일 경로를 캐시하므로 파일을 포함하거나 가져올 때마다 포함 경로를 지속적으로 검색할 필요가 없습니다. 이 캐시를 실제 경로 캐시라고 합니다. (realpath 캐시). 대용량 PHP 파일(예: Composer 구성 요소)을 실행하는 경우 많은 수의 파일을 사용하고 PHP 실제 경로 캐시의 크기를 늘리면 성능이 향상될 수 있습니다. 🎜🎜실제 경로 캐시의 기본 크기는 16K입니다. 이 캐시에 필요한 정확한 크기는 결정하기 쉽지 않지만 약간의 트릭을 사용할 수 있습니다. 먼저 실제 경로 캐시의 크기를 늘리고 특별히 설정합니다. 256K와 같은 큰 값을 지정한 다음 PHP 스크립트 끝에 print_r(realpath_cache_size());를 추가하여 실제 경로 캐시의 실제 크기를 출력하고 마지막으로 실제 경로 캐시의 크기를 이 실제 크기로 변경합니다. 값. php.ini 파일에서 실제 경로 캐시의 크기를 설정할 수 있습니다: 🎜rrreee🎜관련 권장 사항: 🎜🎜🎜PHP.ini의 기본 세션 구성에 대한 심층 소개🎜🎜🎜🎜PHP의 일반적인 구성에 대한 자세한 설명 .ini🎜🎜

위 내용은 php.ini 구성 조정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.