国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP性能checklist

2024-09-04 11:50:23
字體:
來源:轉載
供稿:網友
  1. 運行環境
    1. 使用最新的PHP版本 + 20%
      5.5 > 5.4 > 5.3
    2. 使用更快的OPCache緩存 + 20%
      ZendOpcache > APC
    3. 使用Nginx+PHP-FPM 而不是 Apache+mod_php
      1. Nginx
        1. workers進程數等于CPU核數
          worker_processes =  [CPU cores];
        2. 設置cpu親密性,每個worker對于一個cpu
          worker_cpu_affinity 01 10; #雙核
        3. 使用 limit_zone阻止惡意訪問
          limit_req_zone  $binary_remote_addr  zone=qps1:1m   rate=3r/s;location /delay {    limit_req   zone=qps1  burst=5;}
        4. 靜態文件緩存
          location ~* /.(js|css|png|jpg|jpeg|gif|ico)$ {    expires 24h;    log_not_found off;}
      2. PHP-FPM
        1. 打開error_log+slow_log,幫助你監控,迅速定位錯誤
          slowlog = /var/log/php-fpm.$pool.slow
          request_slowlog_timeout = 1
          php_admin_value[error_log] = /var/log/php-fpm.$pool.error
        2. 使用進程池
          PHP支持使用進程池,比如將網站前端和管理后臺分別設置兩個進程池:
          [fontend]
          # 前端:并發請求多,限制內存占用,限制單請求執行時長
          max_children=100;memory_limit=16M;request_terminate_timeout=15
          [backend]
          # 后端:并發請求少,占用內存大,不限制執行時間
          max_children=10;memory_limit=128M;request_terminate_timeout=0
        3. 設置合理的進程數
          取決于你的PHP程序是IO密集型還是CPU密集型,可使用htop觀察;
          IO密集型:100/%MEM
          * 限制內存 php_admin_value[memory_limit] = 32M
          CPU密集型:100/%CPU
          pm = dynamic
          pm.max_children = ?
        4. 設置PHP最長執行時間
          PHP-FPM一個請求獨占一個進程,如果不設置超時時間,慢請求會迅速占滿所有fpm進程
          request_terminate_timeout = 15
    4. MySQL
      1. 打開慢日志
        log_slow_queries = /var/log/mysql/mysql-slow.log
        long_query_time = 1
      2. Innodb 設置
        innodb_buffer_pool_size = 1Ginnodb_log_file_size = 256Minnodb_log_buffer_size = 4Minnodb_flush_log_at_trx_commit = 2innodb_thread_concurrency = 8innodb_flush_method = O_DIRECT
  2. PHP
    1. 優化原則
      抓大放小(總執行時長=執行時長*執行次數)
      * 安裝xhprof+XHGui;進入Hardest Hit ,按Total Wall Time(總執行時長)排序
    2. CPU
      * 監測代碼執行前后的,腳本使用內存變化 

      1. 大加載
        1. 使用大數組作為配置文件
          使用hidef 一次性載入
        2. 載入不需要的類/庫文件
          lazyload,按需加載庫文件
      2. 反序列化
        1. 使用更快的序列化/反序列化方法
          explode > msgpack > igbinary > json> serialize
        2. 避免反序列化大對象(同大加載)
          保持小對象的序列化/反序列化,不要緩存大數據,檢測方法同上
      3. 使用簡單的數據/對象結構
        例如:避免對大數據集使用Active Record
    3. IOwait
      1. 架構設計上,避免單點,可水平擴展
        異步解決不了可擴展性問題,總執行時長還是一樣多
      2. 設置請求timeout
        避免一個服務延遲,拖累整個頁面請求
      3. 合并請求  curl/sql/redis/memcache
        * PHPIO: 循環執行IO函數,記錄代碼路徑重復次數,例如:
        foreach ($users as $uid) {
        mysql_query(‘SELECT * FROM usr WHERE uid = $uid’)
        }
        =>
        mysql_query(‘SELECT * FROM usr WHERE uid IN (‘.implode(‘,’,$users).’)');
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 襄樊市| 调兵山市| 若羌县| 政和县| 鲁山县| 汾阳市| 九龙城区| 和静县| 高要市| 紫云| 灵寿县| 疏勒县| 呼伦贝尔市| 桃园市| 濉溪县| 淮安市| 金山区| 奉贤区| 普兰县| 柞水县| 崇州市| 秭归县| 白山市| 朝阳市| 玉屏| 钟山县| 柳河县| 湖南省| 中江县| 石渠县| 鄂尔多斯市| 屏山县| 内江市| 冷水江市| 曲麻莱县| 买车| 兰考县| 沿河| 多伦县| 桐梓县| 敦煌市|