亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP并發性能調優實戰(性能提升104%)

2020-03-22 17:51:06
字體:
來源:轉載
供稿:網友
未標題-16.png

業務背景

框架及相應環境

  1. laravel5.7, mysql5.7, redis5, nginx1.15

  2. centos 7.5 bbr

  3. docker, docker-compose

  4. 阿里云 4C和8G

問題背景

php已經開啟opcache, laravel也運行了optimize命令進行優化, composer也進行過dump-autoload命令.

首先需要聲明的是, 系統的環境中是一定有小問題的(沒有問題也不可能能夠提升如此大的性能), 但是這些問題, 如果不通過使用合適的工具, 可能一輩子也發現不出來.

本文關注的就是如何發現這些問題, 以及發現問題的思路.

我們首先找到系統中一個合適的API或函數, 用來放大問題.

這個api設計之初是給nginx負載均衡做健康檢查的.使用ab -n 100000 -c 1000 進行壓測, 發現qps只能到140個每秒.

我們知道Laravel的性能是出了名的不好, 但是也不至于到這個程度, 從api的編寫來看不應該這么低. 所以決定一探究竟.

 html' target='_blank'>public function getActivateStatus()    {        try {            $result = /DB::select('select 1');            $key = 1;            if ($result[0]->$key !== 1) {                throw new /Exception("mysql 檢查失敗");            }        } catch (/Exception $exception) {            /Log::critical("數據庫連接失敗: {$exception->getMessage()}", $exception->getTrace());            return /response(null, 500);        }        try {            Cache::getRedis()->connection()->exists("1");        } catch (/Exception $exception) {            /Log::critical("緩存連接失敗: {$exception->getMessage()}", $exception->getTrace());            return /response(null, 500);        }        return /response(null, 204);    }

問題表現以及排查思路

top

top命令發現系統CPU占用100%其中用戶態占80%, 內核態占20%, 看起來沒什么大問題. 有一個地方看起來很奇怪,top命令的運行結果

下載 (2).jpg

就是有一部分php-fpm進程處在Sleep狀態, 但CPU占用還是達到了近30%.當一個進程處于Sleep狀態的時候, 任然占用了不少CPU, 先不要懷疑是不是進程的問題, 我們看一下Ttop命令的man page.

%CPU -- CPU usageThe task's share of the elapsed CPU time since the last screen update, expressed as a percentage of total CPU time.

大致意思是這個占用是最后一次屏幕刷新的時候, 進程CPU的占用. 由于top命令收集信息的時候, 可能linux把這個進程強制調度了 ( 比如用于top收集進程信息 ), 所以在這一瞬間(屏幕刷新的這一瞬間)某些php-fpm進程處于sleep狀態, 可以理解, 所以應該不是php-fpm的問題.

pidstat

首先選出一個php-fpm進程, 然后使用pidstat查看進程詳細的運行情況

下載 (3).jpg過程中也沒發現什么異樣, 并且和top命令的運行結果也基本一致.

vmstat

保持壓測壓力, 運行vmstate查看, 除了context switch (上下文切換)有點高之外, 并沒有看到太多異常.由于我們使用的docker, redis, mysql都運行在同一臺機器上, 7000左右的CS還是一個合理的范圍, 但是這個IN(中斷)就有點太高了, 達到了1.4萬左右. 一定有什么東西觸發了中斷.

下載 (4).jpg

我們知道中斷有硬中斷和軟中斷, 硬中斷是由網卡, 鼠標等硬件發出中斷信號, cpu馬上停下在做的事情, 處理中斷信號. 軟中斷是由操作系統發出的, 常用于進程的強制調度.

不管是vmstat還是pidstat都只是新能探測工具, 我們無法看到具體的中斷是由誰發出的.我們通過/proc/interrupts 這個只讀文件中讀取系統的中斷信息, 獲取到底是什么導致的中斷升高. 通過watch -d命令, 判斷變化最頻繁的中斷.

watch -d cat /proc/interrupts

下載 (5).jpg

我們發現其中Rescheduling interrupts變化的最快, 這個是重調度中斷(RES),這個中斷類型表示,喚醒空閑狀態的CPU 來調度新的任務運行。這是多處理器系統(SMP)中,調度器用來分散任務到不同 CPU的機制,通常也被稱為處理器間中斷(Inter-Processor Interrupts,IPI)。結合vmstat中的命令, 我們可以確定造成qps不高的原因之一是過多的進程爭搶CPU導致的, 我們現在還不能確定具體是什么, 所以還需要進一步的排查.

strace

strace可以查看系統調用, 我們知道, 當使用系統調用的時候, 系統陷入內核態, 這個過程是會產生軟中斷的, 通過查看php-fpm的系統調用, 驗證我們的猜想

下載 (6).jpg果然, 發現大量的stat系統調用, 我們猜想, 是opcache在檢查文件是否過期導致的. 我們通過修改opcache的配置, 讓opcache更少的檢查文件timestamp, 減少這種系統調用

 opcache.validate_timestamps="60"    opcache.revalidate_freq="0"

再次執行ab命令進行壓測

下載 (7).jpg果然qps直接漲到了205, 提升非常明顯, 有接近 46% 的提升

perf

現在任然不滿足這個性能, 希望在更多地方找到突破口.通過

perf record -gperf report -g

看到系統的分析報告

下載 (8).jpg

我們看到, 好像這里面有太多tcp建立相關的系統調用(具體是不是我還不清楚, 請大神指正, 但是看到send, ip, tcp啥的我就懷疑可能是tcp/ip相關的問題).

我們懷疑兩種情況

  1. 與mysql, redis重復大量的建立TCP連接, 消耗資源

  2. 大量請求帶來的tcp連接

先說第一個, 經過檢查, 發現數據庫連接使用了php-fpm的連接池, 但是redis連接沒有, redis用的predis, 這個是一個純PHP實現, 性能不高, 換成了phpredis:

打開laravel的config/database.php文件, 修改redis的driver為phpredis, 確保本機已安裝php的redis擴展. 另外由于Laravel自己封裝了一個Redis門面, 而恰好redis擴展帶來的對象名也叫Redis. 所以需要修改Laravel的Redis門面為其他名字, 如RedisL5.

再次進行壓測

下載 (9).jpg

達到了喜人的286qps, 雖然和其他主打高性能的框架或者原生php比, 還有很高的提升空間(比如Swoole), 但是最終達到了104%的提升, 還是很有意義的

總結

  1. 我們通過top, 發現系統CPU占用高, 且發現確實是php-fpm進程占用了CPU資源, 判斷系統瓶頸來自于PHP.

  2. 接著我們通過pidstat, vmstat發現壓測過程中, 出現了大量的系統中斷, 并通過 watch -d cat /proc/interrupts 發現主要的中斷來自于重調度中斷(RES)

  3. 通過strace查看具體的系統調用, 發現大量的系統調用來自于stat, 猜測可能是opcache頻繁的檢查時間戳, 判斷文件修改. 通過修改配置項, 達到了46%的性能提升

  4. 最后再通過perf, 查看函數調用棧, 分析得到, 可能是大量的與redis的TCP連接帶來不必要的資源消耗. 通過安裝redis擴展, 以及使用phpredis來驅動Laravel的redis緩存, 提升性能, 達到了又一次近50%的性能提升.

  5. 最終我們完成了我們的性能提升104%的目標

推薦教程:網站高并發架設基礎教程

以上就是PHP并發性能調優實戰(性能提升104%)的詳細內容,更多請關注 其它相關文章!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品yw在线观看| 亚洲成人激情视频| 亚洲摸下面视频| 欧美精品999| 一本大道香蕉久在线播放29| 亚洲最大的免费| 伊人久久大香线蕉av一区二区| 亚洲毛片在线观看| 欧美激情精品久久久久久免费印度| www.国产一区| 亚洲一区二区久久久久久久| 91精品视频在线看| zzijzzij亚洲日本成熟少妇| 欧美日韩免费网站| 日本高清视频一区| 亚洲成年网站在线观看| 精品成人国产在线观看男人呻吟| 欧美与黑人午夜性猛交久久久| 欧美黄色三级网站| 欧美小视频在线| 日韩国产激情在线| 亚洲欧美日韩精品久久亚洲区| 午夜精品在线视频| 欧美日本高清一区| 亚洲国产高清自拍| 日韩一区二区精品视频| 日韩欧美中文字幕在线观看| 欧美午夜影院在线视频| 亚洲精品视频免费在线观看| 中文字幕日韩精品有码视频| 亚洲国产精品中文| 亚洲成人黄色在线观看| 亚洲精品福利免费在线观看| 成人做爽爽免费视频| 成人免费大片黄在线播放| 日韩av一区在线| 欧美成人在线免费视频| 亚洲精品欧美日韩专区| 日韩欧美在线视频日韩欧美在线视频| 青青在线视频一区二区三区| 精品人伦一区二区三区蜜桃网站| 欧美丝袜美女中出在线| 亚洲网站在线看| 欧美性xxxx在线播放| 亚洲精品一区二区在线| 欧美性一区二区三区| 韩剧1988在线观看免费完整版| 在线视频国产日韩| 不卡在线观看电视剧完整版| 欧美美女15p| 91成人免费观看网站| 国产精品久久久久久亚洲调教| 亚洲一级片在线看| 亚洲综合成人婷婷小说| 久久久久久国产精品美女| 亚洲精品按摩视频| 日韩美女在线观看| 欧美激情在线播放| 91tv亚洲精品香蕉国产一区7ujn| 欧美福利视频在线观看| www.日韩不卡电影av| 欧美激情亚洲综合一区| 欧美高清视频在线观看| 91久久久久久久久| 国产综合在线视频| 高跟丝袜一区二区三区| 亚洲成人a级网| 中文综合在线观看| 国产成人中文字幕| 精品日韩视频在线观看| 91精品久久久久久久久| 欧美日韩福利视频| 亚洲91精品在线观看| 亚洲精品国产精品自产a区红杏吧| 久久精品一偷一偷国产| 日韩一二三在线视频播| 亚洲va久久久噜噜噜| 久久精视频免费在线久久完整在线看| 日韩欧美成人区| 91免费看片网站| 久热精品在线视频| 国产精品视频久久| 欧美亚洲成人xxx| 精品久久中文字幕| 成人xxxx视频| 久久99久久99精品免观看粉嫩| 久久久久国色av免费观看性色| 欧美激情国产日韩精品一区18| 亚洲欧美在线免费观看| 午夜精品一区二区三区视频免费看| 日韩在线视频导航| 亚洲伦理中文字幕| 日韩av综合中文字幕| 国产亚洲欧美aaaa| 久久精品夜夜夜夜夜久久| 国产精品免费观看在线| 欧美猛男性生活免费| 精品欧美aⅴ在线网站| 亚洲一区二区三区四区视频| 国产午夜精品美女视频明星a级| 国产午夜精品全部视频播放| 久久久久久高潮国产精品视| 亚洲人成在线免费观看| 2019亚洲日韩新视频| 国产精品久久久久久一区二区| 国产成人一区二区三区小说| 欧美国产精品人人做人人爱| 久热精品视频在线| 91av在线免费观看视频| 国产精品一区久久| 久久亚洲影音av资源网| 亚洲丝袜一区在线| 亚洲精品大尺度| 成人疯狂猛交xxx| 97久久久免费福利网址| 中文字幕亚洲图片| 亚洲а∨天堂久久精品9966| 欧美精品久久久久久久久| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲国产美女久久久久| 日韩av在线资源| 欧美激情网站在线观看| 蜜臀久久99精品久久久无需会员| 亚洲色图综合久久| 欧美性xxxxhd| 久久久久免费精品国产| 国产精品福利在线观看| 亚洲男女性事视频| 欧美日韩午夜激情| 国内精品久久久久伊人av| 国产香蕉精品视频一区二区三区| 亚洲欧洲第一视频| 97成人在线视频| 88国产精品欧美一区二区三区| 国产精品爱久久久久久久| 日韩av在线资源| 亚洲色在线视频| 4k岛国日韩精品**专区| 亚洲专区中文字幕| 中文字幕日韩在线视频| 久久免费视频在线| 亚洲香蕉成人av网站在线观看| 日韩视频第一页| 操日韩av在线电影| 一本久久综合亚洲鲁鲁| 日韩美女激情视频| 亚洲精品大尺度| 欧美乱大交做爰xxxⅹ性3| 一区二区三区国产在线观看| 国内精品在线一区| 国产精品视频区1| 日韩在线观看免费全| 九九精品在线播放| 欧美一区二三区| 亚洲韩国青草视频| 俺去亚洲欧洲欧美日韩| 97视频com| 国产女同一区二区| 色综合久久悠悠| 最近2019年日本中文免费字幕| 中文字幕欧美视频在线| 日日狠狠久久偷偷四色综合免费| 欧美在线亚洲在线| 亚洲国产成人一区|