當前位置:博客首頁(yè)>>nginx >> 閱讀正文

LNMP單機高并發(fā)的簡(jiǎn)單優(yōu)化

作者: 鄭曉 分類(lèi): nginx, PHP, 分享經(jīng)驗 發(fā)布于: 2020-12-04 19:00 瀏覽:3,509 沒(méi)有評論


小項目使用單臺機器,2核4G,使用CentOS+Nginx+MySQL+PHP環(huán)境搭建的搶購活動(dòng)。前臺Vue+Laravel框架提供API及后管,使用Redis防止超售問(wèn)題。

優(yōu)化前使用默認的lnmp配置,活動(dòng)開(kāi)始后基本卡死,php-fpm日志記錄到線(xiàn)程數量不夠、CPU占用90%以上。慢日志中發(fā)現laravel include過(guò)多文件導致磁盤(pán)IO過(guò)高,網(wǎng)站請求變慢,進(jìn)而導致nginx日志中過(guò)多的499狀態(tài)碼(客戶(hù)端主動(dòng)關(guān)閉),用戶(hù)體驗效果很差。

我使用的幾條優(yōu)化方法:

  1. 首先盡量減少搶購過(guò)程中的mysql查詢(xún),轉移到Redis儲存,開(kāi)啟Redis持久化,防止宕機后的數據丟失。
  2. 優(yōu)化PHP-FPM,啟動(dòng)多個(gè)php-fpm master進(jìn)程來(lái)分擔過(guò)多的php請求,比如我啟動(dòng)了四個(gè)php-fpm。Nginx中使用upstream進(jìn)行負載均衡。
  3. 手動(dòng)指定Nginx的worker_processes和worker_cpu_affinity,我設置為雙倍,即worker_processes 4、worker_cpu_affinity 0001 0010 0100 1000。
  4. 啟用opcache解決php磁盤(pán)占用過(guò)高的問(wèn)題,opcache緩存php編譯后的字節碼,直接跳過(guò)前期的文件相互引用和編譯解釋過(guò)程,效果明顯。

測試優(yōu)化后,并發(fā)能穩定在140左右,基本無(wú)錯誤,響應很快,體驗提高很多。

? ? ? ?

本文采用知識共享署名-非商業(yè)性使用 3.0 中國大陸許可協(xié)議進(jìn)行許可,轉載時(shí)請注明出處及相應鏈接。

本文永久鏈接: http://www.gdmymj.com/lnmp-high-performance-optimalize.html

發(fā)表評論

change vcode