>  기사  >  백엔드 개발  >  PHP Opcache 최적화 가속

PHP Opcache 최적화 가속

小云云
小云云원래의
2018-03-27 11:53:381518검색

Opcache는 파싱된 PHP 스크립트의 미리 컴파일된 바이트코드를 공유 메모리에 저장하여 매번 PHP 스크립트를 로드하고 파싱하는 오버헤드를 방지하는 방법입니다. 파서는 공유 메모리에서 캐시된 바이트코드를 직접 읽을 수 있으므로 실행 효율성이 크게 향상됩니다. PHP의. PS: Xcache 메커니즘과 구별할 필요가 있으며, 그 사용법은 다음 요약에서 소개하겠습니다.

· 설치 방법

· 구성 방법

· 사용 방법

· 디스플레이 분석

· 참고 사항

1. 설치 방법

PHP 5.5.0 및 이후 버전에서는 PHP에 Opcache가 추가되었습니다. 확장 기능 라이브러리 양식은 릴리스 버전에 포함되어 있습니다. Opcache 가속은 기본적으로 활성화되어 있지 않습니다. 개발자는 php.ini에 Opcache 관련 구성을 추가하거나 주석을 달아야 합니다. 이전 버전의 경우 Opcache를 PECL 확장 라이브러리로 설치하고 구성할 수 있습니다.

참고:

--disable-all 매개변수를 사용하여 기본 확장의 빌드를 비활성화하는 경우 --enable-opcache 옵션을 사용하여 Opcache를 활성화해야 합니다.

2.

php.ini 구성 방법:

[opcache]

; opcode 캐시 활성화

opcache.enable=1

; 일반적으로 테스트 및 디버깅에 사용되는 CLI 버전 PHP용 opcode 캐시 활성화

opcache.enable_cli=1

; 공유 메모리 크기, 단위는 MB

opcache.memory_consumption=128

; 저장소 임시 문자열 캐시 크기, 단위는 MB, PHP5.3.0은

opcache .interned_strings_buffer 이전에 이 구성을 무시합니다. =8

; 캐시된 파일 수의 최대 제한이며 적중률은 100% 미만입니다. 이 값을 늘려보세요

opcache.max_accelerated_files=4000

; 여기에서 확인 시간을 설정합니다. 기간, 기본값은 2, 단위는 초입니다.

opcache.revalidate_freq=60

재전송 이벤트의 빠른 중지를 활성화하고 Zend 엔진의 메모리 관리 모듈에 의존합니다. 메모리 블록을 순차적으로 해제하는 대신 모든 요청 변수의 메모리를 한 번에 해제합니다

opcache.fast_shutdown=1

; 파일이 캐시되었는지 여부에 관계없이 PHP 스크립트의 존재 여부와 가독성을 확인하는 기능을 활성화합니다. 캐시가 검사되어 성능이 향상될 수 있습니다. 하지만 비활성화된 경우 opcache.validate_timestamps 옵션은 오래된 데이터를 반환할 위험이 있습니다.

opcache.enable_file_override=1

; 파일 관련 로딩을 위한 확장 라이브러리

zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20131226/opcache.so

참고:

위에 나열된 구성 항목은 일반적으로 사용되는 중요한 구성 항목이지만 실제로는 이러한 구성 항목보다 더 많은 구성 항목이 있습니다.

3. 사용 방법

사실 Opcache의 사용은 주로 Opcache가 제공하는 여러 기능에 반영됩니다.

1.opcache_get_configuration;

Form: array opcache_get_configuration(void)

Get , 구성 정보, 블랙리스트 및 버전 번호를 배열 형식으로 반환합니다.

2.opcache_get_status;

양식: 배열 opcache_get_status(void)

설정된 캐시 상태 정보를 가져옵니다.

3.opcache_invalidate;

Form: boolean opcache_invalidate (string);

이 함수의 기능은 지정된 스크립트의 바이트 코드 캐시를 무효화하는 것입니다.

force가 설정되지 않았거나 FALSE가 전달된 경우 스크립트의 수정 시간이 해당 바이트코드 시간보다 최신인 경우에만 스크립트 캐시가 유효하지 않습니다.

4.opcache_reset;

양식: boolean opcache_reset(void);

이 함수는 전체 바이트코드 캐시를 재설정합니다. opcache_reset()을 호출한 후 다음에 클릭할 때 모든 스크립트가 다시 로드되고 구문 분석됩니다.

5.opcache_compile_file;

양식: boolean opcache_compile_file(string);

스크립트를 실행하지 않고도 컴파일하고 캐시할 수 있습니다.

6.opcache_is_script_cached

양식: 부울 opcache_is_script_cached(문자열);

Opcache에 스크립트가 캐시되었는지 확인합니다.

아래에서는 위의 기능을 캡슐화하는 PHP 스크립트를 작성하겠습니다. 이는 향후 Opcache의 유지 관리 및 관리도 용이하게 합니다.

<?php
/**
 * 这个文件是对opcache优化器的几个
 * 函数的封装,作为一个工具脚本使用
 */
if(!extension_loaded("ZendOpcache")) {
      echo "You do nothave the Zend OPcache extension loaded , please open it up,then retry!";
}
/**
 * 函数操作封装类
 * 数组形式的结果,会转为json格式返回,不做显示上的处理
 * 这里主要处理的是影响Opcache缓存状态的操作,对于查看
 * Opcache各项指标的处理,可查看项目:opcache-status
 */
class OpcacheScriptModel{
      private $_configuration;
      private $_status;
      function __construct() {
            $this->_configuration =opcache_get_configuration();
            $this->_status =opcache_get_status();
      }
      // 获取配置信息
      public function getConfigDatas(){
            echo json_encode($this->_configuration);
      }
      // 获取状态信息
      public function getStatusDatas(){
            echo json_encode($this->_status);
      }
      // 指定某脚本文件字节码缓存失效
      public function invalidate($script){
            return opcache_invalidate($script);
      }
      // 重置或清除整个字节码缓存数据
      public function reset() {
            return opcache_reset();
      }
      // 无需运行,就可以编译并缓存脚本
      public function compile($file){
            return opcache_compile_file($file);
      }
      // 判断某个脚本是否已经缓存到Opcache
      public function isCached($script){
            return opcache_is_script_cached($script);
      }
}
// 获得对象
function getOpcacheDataModel(){
      // 初始化对象
      $dataModel = NULL;
      if(NULL ==$dataModel) {
            $dataModel = new OpcacheScriptModel();
      }
      return $dataModel;
}
?>

위의 스크립트 도구는 비교적 간단하며 일반적으로 배치할 수 있습니다. 프로젝트에서 단독으로 사용하거나 필요에 따라 구문 분석하고 컴파일하면 됩니다. 실제로 다음 오픈 소스 프로젝트의 표시 및 분석도 위의 API 기능을 사용하지만 얻은 데이터를 그래픽 형식으로 표시합니다. 더 직관적입니다.

4. 디스플레이 분석

우리는 PHP 스크립트의 실행 메커니즘이 파서가 PHP 스크립트 파일을 구문 분석하여 바이트 코드 데이터로 구문 분석하고 Opcache 최적화 프로그램의 역할이 구문 분석된 바이트 코드 데이터를 읽는 것임을 알고 있습니다. 매번 PHP 스크립트 로드 및 구문 분석을 반복하지 않고 캐시에서 직접 수행하므로 Opcache를 사용하려면 일반적으로 두 가지만 수행하면 됩니다.

1 Opcache 최적화 프로그램을 사용하여 PHP 속도 향상 프로그램 실행 속도 ;

2. Opcache의 다양한 지표와 매개변수를 통해 현재 PHP 프로그램의 성능 상태를 실시간으로 파악합니다.

그렇다면 현재 Opcache 가속 효과를 어떻게 보고 분석할까요? 정답은 Github에서 오픈소스 프로젝트를 이용하시면 됩니다: https://github.com/rlerdorf/opcache-status

다운로드한 프로젝트를 현재 웹 서버의 루트 디렉터리에 넣고 직접 접속하여 효과를 확인해보세요. :


위의 스크린샷과 프로젝트 파일에서 볼 수 있듯이 Opcache 도구는 단순화된 GUI 버전이며 이를 사용하면 다음 내용을 명확하게 이해하고 분석할 수 있습니다. 사용량, 남은 상태 및 메모리 낭비 및 비율

3. 캐시 적중 및 누락 수

5. Cache 스크립트 파일을 뷰 형태로 나누어 직관적으로 표시합니다.

자, Opcache의 시각화를 위한 내용은 여기까지입니다.

5. 참고

1. Xcache와 Opcache에 대한 PHP 최적화를 동시에 활성화하는 것은 권장되지 않습니다.

PHP 5.5.0 및 후속 버전에는 Opcache에 대한 지원이 내장되어 있으므로 PHP는 그 중요성을 인식하고 있습니다. , Xcache 등에 비해. 타사 PHP 최적화 프로그램의 경우 Opcache를 사용하는 것이 더 나은 선택입니다. 또한 두 가지가 동시에 존재하는 경우 Opcache의 캐시 적중 횟수가 크게 줄어들고 불필요한 오버헤드가 추가됩니다.

2. 개발 중에는 Opcache를 켜는 것을 권장하지 않습니다

Opcache를 켜면 opcache.revalidate_freq의 영향을 받기 때문에 개발자가 수정한 콘텐츠가 표시되지 않고 즉시 적용됩니다. =60이므로 개발 중에는 Opcache를 켜두는 것이 좋으며, 테스트 후에는 성능 테스트 시에도 다시 테스트를 열어야 합니다. 물론, 프로덕션 환경에서는 항상 Opcache를 켜두어야 합니다.

3. Opcache 표시기를 너무 크게 설정하는 것은 권장하지 않습니다.

구성 크기 또는 각 Opcache 표시기 활성화 여부는 프로젝트의 실제 요구 사항 및 Opcache에서 공식적으로 권장하는 구성과 결합되어야 합니다. 프로젝트의 시각적 캐시 정보 분석 조정은 위의 네 번째 부분과 결합될 수 있습니다.

4. Opcache의 이전 버전을 장기간 사용하는 것은 권장되지 않습니다

버그 수정, 기능 최적화 및 새로운 기능에 대해 실시간으로 알아보려면 Opcache 공식 웹사이트에 주의를 기울이는 것이 좋습니다. , 자신의 프로젝트에 더 잘 적용할 수 있습니다.

5. 위에서 소개한 오픈소스 프로젝트를 프로덕션 환경에서는 웹 서비스 루트 디렉터리에 넣는 것을 권장하지 않습니다. 이유는 매우 간단합니다. 왜냐하면 이 오픈소스 프로젝트에는 접근 제한 및 보안 처리가 없기 때문입니다. 외부 인터넷 사용자라면 누구나 접속주소만 알면 직접 접속이 가능하므로 안전하지 않습니다. 일반적으로 이 오픈 소스 도구는 PHP의 성능을 시각적으로 분석하는 데에만 도움이 되며 일반적으로 개발 및 디버깅 단계에서 사용됩니다. 프로덕션 환경에서만 활성화하려면 보안 제한을 수행해야 합니다.

관련 추천:

PHP용 Opcache 가속 사용 방법 공유

php에서 opcache 사용

PHP 최적화 가속을 위한 Opcache 사용 요약

위 내용은 PHP Opcache 최적화 가속의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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