>  기사  >  백엔드 개발  >  OPcache 확장을 사용하여 PHP7 성능을 향상시키는 팁

OPcache 확장을 사용하여 PHP7 성능을 향상시키는 팁

coldplay.xixi
coldplay.xixi앞으로
2021-02-11 10:18:012620검색

OPcache 확장을 사용하여 PHP7 성능을 향상시키는 팁

추천(무료): PHP7

어디에 계시든 이메일을 보시면 바로 답변드리겠습니다.내 이메일: echo "YUBzYW1lZ28uY29tCg==" | base64 -d
Preface
11시 반, 이제 자리를 잡을 시간입니다.

PHP가 실행되면 이러한 프로세스가 있습니다. PHP 코드가 먼저 사전 컴파일되고 바이트코드가 생성된 다음 마지막으로 CPU가 메모리에서 컴파일된 바이트코드 조각을 실행합니다. 우리는 PHP 프로그램을 실행할 때마다 이러한 과정을 거치게 된다는 것을 알게 될 것입니다. 이것은 시간 낭비가 아닙니다. 예, 생각하기 쉽습니다: C++ 언어를 따르고 소스 코드를 파일로 컴파일하는 것은 어떨까요? 메모리에 직접 로드할 수 있으므로 형제는 어디에 있습니까? 어-허?. 소총을 꺼내서 이 OPcache를 로드하세요. PHP5.5.0이 나온 이후로 이 zend 확장 기능이 내장되었습니다. OPcache。自从PHP5.5.0出来后,就内置此zend扩展了。


What is OPcache
OPcache是PHP中的Zend扩展,可以大大提升PHP的性能。
OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销。


Judge whether it has been extended OPcache

➜  ~ php -m | grep OPcache
Zend OPcache
Zend OPcache

倘若没有开启的话,可以在php.ini配置中开启
/home/samego/service/php7.2/php.ini

➜  ~ echo zend_extension="opcache.so" >> /home/samego/service/php7.2/php.ini

About OPcache configure
接下来,我们需要在 PHP 的配置文件中启用 OPcache(默认是关闭的):

opcache.enable=1

下面我们继续对 OPcache 进行一些优化配置:

opcache.memory_consumption=512

这个配置表示你想要分配给 OPcache 的内存空间(单位:MB),设置一个大于 64 的值即可。

opcache.interned_strings_buffer=64

这个配置表示你想要分配给实际字符串的空间(单位:MB),设置一个大于 16 的值即可。

opcache.max_accelerated_files=32531

这个配置表示可以缓存多少个脚本,将这个值尽可能设置为与项目包含的脚本数接近(或更大)。

opcache.validate_timestamps=0

改配置值用于重新验证脚本,如果设置为 0(性能最佳),需要手动在每次 PHP 代码更改后手动清除 OPcache。如果你不想要手动清除,可以将其设置为 1 并通过 opcache.revalidate_freq 配置重新验证间隔,这可能会消耗一些性能,因为需要每隔 x 秒检查更改。

opcache.save_comments=1

这个配置会在脚本中保留注释,我推荐开启该选项,因为一些库依赖于这个配置,并且我也找不出什么关闭它的好处。

opcache.fast_shutdown=0

快速关闭会给一个更快速清理内存的机制,不过,在我的基准测试中,更慢一些,可能这会应用带来一些性能提升,但是你需要自己去尝试。

所以,最终的配置优化长这样:

opcache.enable=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=32531
opcache.validate_timestamps=0
opcache.save_comments=1
opcache.fast_shutdown=0

你可以使用这些配置值进行实验,具体配置值取决于你的应用大小和服务器配置。
学习于Laravel社区


Laravel OPcache

  • install

    ➜  ~ composer require appstract/laravel-opcache
  • configure

    ➜  ~ php artisan vendor:publish --provider="Appstract\Opcache\OpcacheServiceProvider" --tag="config"
  • command

# Clear OPcache:
➜  ~ php artisan opcache:clear

# Show OPcache config:
➜  ~ php artisan opcache:config

# Show OPcache status:
➜  ~ php artisan opcache:status

# Pre-compile your application code:
➜  ~ php artisan opcache:optimize

拭目以待的场景测试

个人比较喜欢数据说话
场景:(1)请求GET接口 (2)测试次数10  (3)并发数为100

case non-extension

1000个请求,花费32.32秒,每秒30.94个请求

Transactions:               1000 hits
Availability:             100.00 %
Elapsed time:              32.32 secs
Data transferred:           0.97 MB
Response time:              0.32 secs
Transaction rate:          30.94 trans/sec
Throughput:             0.03 MB/sec
Concurrency:                9.96
Successful transactions:        1000
Failed transactions:               0
Longest transaction:            0.44
Shortest transaction:           0.11

case had extend


OPcache란 무엇입니까

OPcache는 PHP 성능을 크게 향상시킬 수 있는 PHP의 Zend 확장입니다.

OPcache는 PHP 스크립트의 미리 컴파일된 바이트코드를 공유 메모리에 저장하여 PHP 성능을 향상시킵니다. 미리 컴파일된 바이트코드를 저장하면 매번 PHP 스크립트를 로드하고 구문 분석하는 오버헤드가 절약된다는 것입니다.


OPcache 확장 여부를 판단하세요

Transactions:               1000 hits
Availability:             100.00 %
Elapsed time:               2.94 secs
Data transferred:           0.97 MB
Response time:              0.03 secs
Transaction rate:         340.14 trans/sec
Throughput:             0.33 MB/sec
Concurrency:                9.86
Successful transactions:        1000
Failed transactions:               0
Longest transaction:            0.29
Shortest transaction:           0.01
🎜활성화되어 있지 않은 경우 php.ini 구성에서 활성화할 수 있습니다🎜/home/samego/service/php7.2/php.ini 🎜rrreee🎜🎜🎜OPcache 구성 정보🎜🎜다음으로 PHP 구성 파일에서 OPcache를 활성화해야 합니다(기본값은 닫혀 있음). 🎜rrreee🎜 다음으로 계속해서 OPcache에 대한 몇 가지 최적화 구성을 만듭니다. 🎜rrreee🎜 이 구성은 OPcache에 할당하려는 메모리 공간(단위: MB)을 의미하며, 64보다 큰 값을 설정하면 됩니다. 🎜rrreee🎜이 구성은 실제 문자열에 할당하려는 공간(단위: MB)을 나타냅니다. 16보다 큰 값을 설정하면 됩니다. 🎜rrreee🎜이 구성은 캐시할 수 있는 스크립트 수를 나타냅니다. 이 값은 프로젝트에 포함된 스크립트 수에 최대한 가깝게(또는 그보다 크게) 설정하세요. 🎜rrreee🎜재검증 스크립트의 구성 값을 변경하세요. 0(최고 성능)으로 설정하면 각 PHP 코드 변경 후 OPcache를 수동으로 지워야 합니다. 수동 제거를 원하지 않는 경우 이 값을 1로 설정하고 opcache.revalidate_freq를 통해 재검증 간격을 구성할 수 있습니다. 이 경우 변경 사항을 x초마다 확인해야 하므로 성능이 저하될 수 있습니다. 🎜rrreee🎜이 구성은 스크립트에 주석을 유지합니다. 일부 라이브러리는 이 구성에 의존하고 이 옵션을 꺼도 이점을 찾을 수 없기 때문에 이 옵션을 켜는 것이 좋습니다. 🎜rrreee🎜빠른 종료는 메모리를 지우는 더 빠른 메커니즘을 제공하지만, 내 벤치마크 테스트에서는 속도가 더 느릴 수도 있지만 직접 시도해 보아야 합니다. 🎜🎜따라서 최종 구성 최적화는 다음과 같습니다. 🎜rrreee🎜애플리케이션 크기와 서버 구성에 따라 달라지는 이러한 구성 값을 실험해 볼 수 있습니다. 🎜Laravel 커뮤니티에서 알아보기🎜
🎜🎜Laravel OPcache🎜🎜
  • 🎜install🎜rrreee
  • 🎜configure🎜rrreee
  • 🎜 command 🎜
rrreee🎜🎜스탠드 보기 시나리오 테스트🎜🎜🎜🎜개인적으로 데이터로 이야기하는 걸 좋아해요🎜시나리오: (1) GET 인터페이스 요청 (2) 테스트 횟수 10 (3) 숫자 동시성은 100🎜🎜🎜 케이스 비확장🎜🎜🎜 요청 1000개, 비용 32.32초, 초당 요청 30.94🎜rrreee🎜🎜케이스 확장🎜🎜🎜1000입니다. 요청, 비용은 2.94초, 초당 요청 340.14건🎜🎜rrreee🎜🎜이 데이터 세트를 보니 매우 기쁘고 매우 기쁩니다. 성능면에서는 말할것도 없을 정도로 극명한 대비가 있어요~OPcache가 옳습니다🎜🎜                                                                                                            ’ 에서 ’ OP ’ ’ s ’ ‐ ‐ ‐ ‐ ‐ OPcache가 맞습니다🎜🎜    

위 내용은 OPcache 확장을 사용하여 PHP7 성능을 향상시키는 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제