이 글의 내용은 PHP에서 Opcache가 무엇인지에 관한 것입니다. Opcache의 원리와 사용법에 대한 소개는 참고할만한 가치가 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
1. 개인 연습에서 opcache가 발견되었습니다
최근 Double Eleven 중 높은 트래픽의 영향에 대처하기 위해 편집자는 서버 성능 병목 현상을 찾기 위해 스트레스 테스트를 실시한 결과 동시성이 100일 때 QPS가
그다지 높지는 않지만 CPU와 메모리 소모량이 엄청나게 높고, 특히 CPU 소모량이 100%에 달하며, 우리 컨테이너와 서버 구성이 거의 최상위 수준으로 업그레이드되었습니다. 이는 이렇게 좋은 서버가 가져야 할 효과는 아닙니다. 그래서 편집자는 다음과 같이 포괄적인 조사를 실시했습니다.
1. 인터페이스의 데이터베이스 쿼리 부분을 확인하세요. 이 부분은 캐시되어 있으며, 데이터베이스와 캐시의 성능 요소를 제외하면 Redis의 사용량이 그리 높지 않습니다. 2. 성능에 영향을 미치는 다른 외부 호출이 있는지 확인하고 이 부분이 얻어지는지 확인합니다. 데이터는 데이터베이스와 캐시를 통해서만 전달되므로 제외됩니다.
3. 인터페이스 프로그램에 복잡한 논리 계산이 있는지 확인합니다. 이 부분에서 처리된 데이터는 처리 후 바로 캐시되는 것으로 확인되었습니다. 일정 기간 동안의 데이터 소스는 Redis 캐시이므로 배제됩니다.
4. 가능한 모든 인터페이스 병목 현상이 배제되었기 때문에, 가장 유력한 이유는 현재 사용되는 laravel5.0 프레임워크가 이렇게 낮은 인터페이스 성능을 유발한다는 것인데, 프레임워크 문서, 소스 코드, 온라인 자료를 통해 laravel 프레임워크가 실행될 때 많은 수의 프레임워크 파일을 로드한다는 사실을 발견했습니다. 그런 다음 이러한 파일을 컴파일하면 서버 CPU 소비가 매우 높아집니다. 이 방향을 통해 편집자는 PHP 컴파일 파일을 캐싱하기 위한 좋은 PHP 확장인 opcache를 발견했습니다.
2. opcache의 원리1.
Opcache는 파싱된 PHP 스크립트의 사전 컴파일된 바이트코드(Operate Code)를 공유 메모리에 저장하여 매번 PHP 스크립트를 로드하고 파싱하는 오버헤드를 방지하는 방법입니다. 파서는 공유 메모리에서 캐시된 데이터를 직접 읽을 수 있습니다. (코드 운영), PHP의 실행 효율성을 크게 향상시킵니다.
2. 운영코드란 무엇인가요?
통역사는 스크립트 코드 분석을 완료한 후 직접 실행할 수 있는 중간 코드, 즉 연산 코드(Operate Code, opcode)를 생성합니다. Opcode 캐시의 목적은 반복적인 컴파일을 피하고 CPU 및 메모리 오버헤드를 줄이는 것입니다. 동적 콘텐츠의 성능 병목 현상이 CPU와 메모리에 있는 것이 아니라 데이터베이스 쿼리로 인한 디스크 I/O 오버헤드와 같은 I/O 작업에 있는 경우 opcode 캐시의 성능 향상은 매우 제한적입니다. 그러나 opcode 캐시는 CPU 및 메모리 오버헤드를 줄일 수 있으므로 이는 항상 좋은 것입니다. 최신 opcode 캐시(Optimizer+, APC2.0+ 등)는 저장을 위해 공유 메모리를 사용하며 실행 전에 코드를 "역직렬화"할 필요 없이 캐시에서 직접 파일을 실행할 수 있습니다. 이로 인해 성능 속도가 크게 향상되고 특히 트래픽이 많고 동시성이 높은 동안 전체 서버 메모리 소비가 낮아지며 단점이 거의 없습니다.
3. Opcode 캐시를 사용하는 이유는 무엇입니까?
이것은 PHP 코드의 수명 주기로 시작됩니다. PHP 스크립트를 요청할 때 아래 그림과 같이 5단계를 거칩니다.
Zend 엔진은 다음에서 파일을 읽어야 합니다. 파일 시스템을 탐색하고 사전과 표현식을 스캔하고, 파일을 구문 분석하고, 실행할 컴퓨터 코드(Opcode라고 함)를 생성하고, 마지막으로 Opcode를 실행합니다. PHP 스크립트가 요청될 때마다 위 단계가 한 번 실행됩니다. PHP 소스 코드가 변경되지 않으면 Opcode는 변경되지 않습니다. 당연히 유비쿼터스 캐싱과 결합되어 Opcode를 다시 생성할 필요가 없습니다. Opcode 메커니즘을 사용하면 나중에 캐시된 Opcode에 직접 액세스하는 것이 더 빠르지 않을까요? Opcode 캐시를 활성화한 후의 흐름도는 다음과 같습니다.
Operate Code 캐시를 사용한 후 PHP 코드는 opcode를 직접 가져와서 직접 실행합니다. 세 단계가 생략되므로 PHP 코드 실행 효율성이 크게 향상됩니다
1.
当你的PHP版本低于7.0时,你可以去http://pecl.php.net/package/ZendOpcache 根据自己的PHP版 本下载相应的opcache版本。比如PHP5.5:http://pecl.php.net/get/zendopcache-7.0.5.tgz tar -zxvf zendopcache-7.0.5.tgz cd zendopcache-7.0.5 phpize ./configure --with-php-config=/usr/local/php/bin/php-config make make install 这是会在php的扩展文件夹内生成opcache.so PHP7.0之后自带opcache.so无需安装
를 설치합니다. 2.
在php.ini加入zend_extension=opcache.so; 注意:这里是zend_extension不是extension,关于zend_extension和extension的区别可以去查阅 相关资料
3을 사용합니다.
关于opcache的详细参数配置比较核心的参数如下: opcache扩展位置 zend_extension=opcache.so 启用opcache opcache.enable=1 使用共享内存大小 opcache.memory_consumption=200 字符串缓存大小 opcache.interned_strings_buffer=8 最大缓存文件数量 opcache.max_accelerated_files=8000 出现异常,立即释放全部内存 opcache.fast_shutdown=1 最大允许占用内存百分比,超过此限制会重启进程 opcache.max_wasted_percentage=20 如果置为1,则将当前路径加入到文件key中,以避免可能产生的同文件名的文件key冲突 opcache.use_cwd=1 文件检测周期 revalidate_freq=3600 启用文件缓存时间戳 opcache.validate_timestamps=1
위 내용은 PHP의 Opcache란 무엇입니까? Opcache의 원리와 사용법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!