站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        高質(zhì)量筆記來(lái)了!關(guān)于PHP7性能優(yōu)化

        Opcache

        1. Opcache原理
        PHP的正常執(zhí)行流程如下

        高質(zhì)量筆記來(lái)了!關(guān)于PHP7性能優(yōu)化

        request請(qǐng)求(nginx,apache,cli等)–>Zend引擎讀取.php文件–>掃描其詞典和表達(dá)式 –>解析文件–>創(chuàng)建要執(zhí)行的計(jì)算機(jī)代碼(稱為Opcode)–>最后執(zhí)行Opcode–> response 返回

        每一次請(qǐng)求PHP腳本都會(huì)執(zhí)行一遍以上步驟,如果PHP源代碼沒有變化,那么Opcode也不會(huì)變化,顯然沒有必要每次都重新生成Opcode,結(jié)合在Web中無(wú)所不在的緩存機(jī)制,我們可以把Opcode緩存下來(lái),以后直接訪問(wèn)緩存的Opcode豈不是更快,啟用Opcode緩存之后的流程圖如下所示:

        高質(zhì)量筆記來(lái)了!關(guān)于PHP7性能優(yōu)化

        Opcode cache 的目地是避免重復(fù)編譯,減少 CPU 和內(nèi)存開銷。
        2. Opcache配置
        在php.ini下添加:

        // 加載opcache(需確認(rèn)已安裝opcache拓展) zend_extension=opcache.so // 開啟opcache opcache.enable = 1 // OPcache共享內(nèi)存存儲(chǔ)大小,單位MB opcache.memory_consumption=1024 // 1G // PHP使用了一種叫做字符串駐留,默認(rèn)是4MB opcache.interned_strings_buffer=32 // 這個(gè)選項(xiàng)用于控制內(nèi)存中最多可以緩存多少個(gè)PHP文件,這個(gè)選項(xiàng)必須得設(shè)置得足夠大,大于你的項(xiàng)目中的所有PHP文件的總和 opcache.max_accelerated_files=80000 // 設(shè)置緩存的過(guò)期時(shí)間(單位是秒),為0的話每次都要檢查 opcache.revalidate_freq=3 // 從字面上理解就是“允許更快速關(guān)閉” opcache.fast_shutdown=1 // CLI環(huán)境下,PHP啟用OPcache opcache.enable_cli=1

        HugePage

        1. HugePage原理
        通過(guò)啟用這個(gè)特性,PHP7會(huì)把自身的TEXT段(執(zhí)行體)”挪“到Huagepage上,之前的測(cè)試,我們能穩(wěn)定的在Wordpress上看到2%~3%的QPS提升。
        關(guān)于Hugepage是啥,簡(jiǎn)單的說(shuō)下就是默認(rèn)的內(nèi)存是以4KB分頁(yè)的,而虛擬地址和內(nèi)存地址是需要轉(zhuǎn)換的, 而這個(gè)轉(zhuǎn)換是要查表的,CPU為了加速這個(gè)查表過(guò)程都會(huì)內(nèi)建TLB(Translation Lookaside Buffer), 顯而易見如果虛擬頁(yè)越小,表里的條目數(shù)也就越多,而TLB大小是有限的,條目數(shù)越多TLB的Cache Miss也就會(huì)越高, 所以如果我們能啟用大內(nèi)存頁(yè)就能間接降低這個(gè)TLB Cache Miss,至于詳細(xì)的介紹,Google一搜一大堆我就不贅述了,這里主要說(shuō)明下如何啟用這個(gè)新特性, 從而帶來(lái)明顯的性能提升。
        2. HugePage配置

        $ sudo sysctl vm.nr_hugepages=512 // 切勿越大越好,會(huì)長(zhǎng)占內(nèi)存

        分配512個(gè)預(yù)留的大頁(yè)內(nèi)存:

        cat /proc/meminfo  | grep Huge AnonHugePages:    106496 kB HugePages_Total:     512 HugePages_Free:      504 HugePages_Rsvd:       27 HugePages_Surp:        0 Hugepagesize:       2048 kB

        然后在php.ini中加入:

        opcache.huge_code_pages=1

        Opcache file cache

        1. Opcache file cache介紹
        使用opcache把編譯后的php文件存儲(chǔ)為文件,實(shí)現(xiàn)php源碼保護(hù)和腳本加速, 會(huì)有很明顯的性能提升
        2. Opcache file cache配置
        在php.ini中加入:

        opcache.file_cache=/tmp

        這樣PHP就會(huì)在/tmp目錄下Cache一些Opcode的二進(jìn)制導(dǎo)出文件, 可以跨PHP生命周期存在.

        配置后需重啟php-fpm

        親測(cè)

        系統(tǒng):centOs 7
        php版本:7.4
        nginx
        laravel: 8.5

        優(yōu)化前

        cpu:95%-96%
        內(nèi)存:2G/16G
        10分鐘4W并發(fā)
        失敗率:24%

        聚合報(bào)告
        高質(zhì)量筆記來(lái)了!關(guān)于PHP7性能優(yōu)化

        每秒處理事務(wù)
        ![PHP7性能優(yōu)化]
        ![PHP7性能優(yōu)化筆記]
        高質(zhì)量筆記來(lái)了!關(guān)于PHP7性能優(yōu)化

        優(yōu)化后

        cpu:20%-40%
        內(nèi)存:5.8G/16G(此處我HugePage設(shè)置2048)
        10分鐘4W并發(fā)
        失敗率:0%

        第一次壓測(cè)

        聚合報(bào)告
        高質(zhì)量筆記來(lái)了!關(guān)于PHP7性能優(yōu)化

        每秒處理事務(wù)

        高質(zhì)量筆記來(lái)了!關(guān)于PHP7性能優(yōu)化

        第二次壓測(cè)

        聚合報(bào)告

        高質(zhì)量筆記來(lái)了!關(guān)于PHP7性能優(yōu)化

        每秒處理事務(wù)

        高質(zhì)量筆記來(lái)了!關(guān)于PHP7性能優(yōu)化

        推薦學(xué)習(xí):《PHP7教程》

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 精品久久久久久| 欧美精品区一级片免费播放| 亚洲а∨天堂久久精品| 国产成人精品天堂| 亚洲精品动漫免费二区| 久久99精品久久久久子伦| 久久精品无码一区二区三区日韩 | 国产999精品久久久久久| 久久精品a亚洲国产v高清不卡| 久久99精品久久久久久9蜜桃 | 久久夜色精品国产www| 亚洲国产精品lv| AV无码精品一区二区三区| 亚洲精品二区国产综合野狼| 麻豆精品| 久久久久久极精品久久久| 国产精品偷伦视频免费观看了| 一区二区精品在线| 你懂的国产精品| 久久91综合国产91久久精品| 91精品国产福利尤物| 国产精品熟女一区二区| 精品久久久久久无码中文字幕一区| 亚洲精品成人片在线观看精品字幕| 青草青草久热精品视频在线观看| 精品一区二区三区免费观看 | 久久精品中文字幕无码绿巨人| 亚洲精品99久久久久中文字幕| 欧美国产成人久久精品| 久久亚洲AV永久无码精品| 九九久久精品国产| 精品a在线观看| 久久精品亚洲乱码伦伦中文| 久久露脸国产精品| 日本精品一区二区久久久| 青草青草久热精品视频在线观看| 亚洲AV无码之日韩精品| 真实国产精品vr专区| 无码国产精品一区二区免费3p | 亚洲?V无码乱码国产精品| 亚洲精品tv久久久久|