- /usr/local/php/etc/php-fpm.conf
- [global]
- pid = /usr/local/php/var/run/php-fpm.pid
- error_log = /usr/local/php/var/log/php-fpm.log
- log_level = notice
- [www]
- listen = /tmp/php-cgi.sock
- listen.backlog = -1
- listen.allowed_clients = 127.0.0.1
- listen.owner = www
- listen.group = www
- listen.mode = 0666
- user = www
- group = www
- pm = dynamic
- pm.max_children = 24
- pm.start_servers = 16
- pm.min_spare_servers = 12
- pm.max_spare_servers = 24
- request_terminate_timeout = 100
- request_slowlog_timeout = 0
- slowlog = var/log/slow.log
從php5.3以后php自帶了php-fpm不是和php5.2一樣以插件的方式存在了,這給我們帶來一個好處502沒有那么容易出現了,壇子里用linux的絕大多數應該還是在用小軍的lnmp的那個包,但是配置優化卻是不盡人意.
php-fpm的配置文件位置:
/usr/local/php/etc/php-fpm.conf
pid = run/php-fpm.pid
pid設置,默認在安裝目錄中的var/run/php-fpm.pid,建議開啟:
error_log = log/php-fpm.log
錯誤日志,默認在安裝目錄中的var/log/php-fpm.log
log_level = notice
錯誤級別. 可用級別為:alert(必須立即處理),error(錯誤情況),warning(警告情況),notice(一般重要信息),debug(調試信息). 默認:notice.
emergency_restart_threshold = 60
emergency_restart_interval = 60s
表示在emergency_restart_interval所設值內出現SIGSEGV或者SIGBUS錯誤的php-cgi進程數如果超過 emergency_restart_threshold個,php-fpm就會優雅重啟,這兩個選項一般保持默認值.
process_control_timeout = 0
設置子進程接受主進程復用信號的超時時間. 可用單位: s(秒), m(分), h(小時), 或者 d(天) 默認單位: s(秒). 默認值: 0.
daemonize = yes
后臺執行fpm,默認值為yes,如果為了調試可以改為no.
在FPM中,可以使用不同的設置來運行多個進程池,這些設置可以針對每個進程池單獨設置.
listen = 127.0.0.1:9000
fpm監聽端口,即nginx中php處理的地址,一般默認值即可.
可用格式為:‘ip:port’, ‘port’, ‘/path/to/unix/socket’. 每個進程池都需要設置.
listen.backlog = -1
backlog數,-1表示無限制,由操作系統決定,此行注釋掉就行。backlog含義參考:
listen.allowed_clients = 127.0.0.1
允許訪問FastCGI進程的IP,設置any為不限制IP,如果要設置其他主機的nginx也能訪問這臺FPM進程,listen處要設置成本地可被訪問的IP。默認值是any。
每個地址是用逗號分隔. 如果沒有設置或者為空,則允許任何服務器請求連接
- listen.owner = www
- listen.group = www
- listen.mode = 0666
unix socket設置選項,如果使用tcp方式訪問,這里注釋即可.
user = www
group = www
啟動進程的帳戶和組
pm = dynamic
pm表示使用那種方式,有兩個值可以選擇,就是static(靜態模式)或者dynamic(動態模式5.2的時候叫apache-like但是不好使)
如果選擇static,則由pm.max_children指定固定的子進程數。
如果選擇dynamic,則由下開參數決定:
pm.max_children,子進程最大數
pm.start_servers,啟動時的進程數
pm.min_spare_servers,保證空閑進程數最小值,如果空閑進程小于此值,則創建新的子進程
pm.max_spare_servers,保證空閑進程數最大值,如果空閑進程大于此值,此進行清理
對于專用服務器,pm可以設置為static。
pm.max_requests = 1000
設置每個子進程重生之前服務的請求數. 對于可能存在內存泄漏的第三方模塊來說是非常有用的. 如果設置為 ’0′ 則一直接受請求. 等同于 PHP_FCGI_MAX_REQUESTS 環境變量. 默認值: 0.
pm.status_path = /status
FPM狀態頁面的網址. 如果沒有設置, 則無法訪問狀態頁面. 默認值: none.
ping.path = /ping
FPM監控頁面的ping網址. 如果沒有設置, 則無法訪問ping頁面. 該頁面用于外部檢測FPM是否存活并且可以響應請求. 請注意必須以斜線開頭 (/)。
ping.response = pong
用于定義ping請求的返回相應. 返回為 HTTP 200 的 text/plain 格式文本. 默認值: pong.
request_terminate_timeout = 0
設置單個請求的超時中止時間. 該選項可能會對php.ini設置中的’max_execution_time’因為某些特殊原因沒有中止運行的腳本有用. 設置為 ’0′ 表示 ‘Off’.
當經常出現502錯誤時可以嘗試更改此選項。
request_slowlog_timeout = 10s
當一個請求該設置的超時時間后,就會將對應的PHP調用堆棧信息完整寫入到慢日志中. 設置為 ’0′ 表示 ‘Off’
slowlog = log/$pool.log.slow
慢請求的記錄日志,配合request_slowlog_timeout使用
rlimit_files = 1024
設置文件打開描述符的rlimit限制. 默認值: 系統定義值
系統默認可打開句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。
rlimit_core = 0
設置核心rlimit最大限制值. 可用值: ‘unlimited’ 、0或者正整數. 默認值: 系統定義值.
chroot =
啟動時的Chroot目錄. 所定義的目錄需要是絕對路徑. 如果沒有設置, 則chroot不被使用.
chdir =
設置啟動目錄,啟動時會自動Chdir到該目錄. 所定義的目錄需要是絕對路徑. 默認值: 當前目錄,或者/目錄(chroot時)
catch_workers_output = yes
重定向運行過程中的stdout和stderr到主要的錯誤日志文件中. 如果沒有設置, stdout 和 stderr 將會根據FastCGI的規則被重定向到 /dev/null . 默認值: 空
下面已我的php配置例子:
- [global]pid = /usr/local/php/var/run/php-fpm.pid
- error_log = /home/wwwlogs/php-fpm.log
- log_level = notice
- rlimit_files = 65535
- rlimit_core = 0
- [www]
- listen = /tmp/php-cgi.sock
user = nobody nginx, php-fpm進程的權限不能以網站所有權運行安全有問題
group = nobody nginx, php-fpm進程的權限不能以網站所有權運行安全有問題
pm = dynamic
pm.max_children = 36 靜態模式開啟進程數
pm.start_servers = 9 動態模式默認開啟進程 數
pm.min_spare_servers = 8 動態模式默認最低保留進程 數
pm.max_spare_servers = 36 動態模式默認最高 進程數具體通過netstat -napo |grep "php-fpm" | wc -l和系統負載確定
pm.max_requests = 4096 進程執行xxx后重啟釋放內存避免內存泄漏
request_terminate_timeout = 100 進程超時時間
request_slowlog_timeout = 3s 記錄大于3秒的php執行命令
slowlog = /home/wwwlogs/php-fpm.log.slow
rlimit_files = 65535 這個值一定要改默認的太小不改日志會有錯誤但是要和全局文件數相同具體查看ulimit -n系統全局設置
rlimit_core = 0
php-fpm.conf有兩個至關重要的參數:
一個是”max_children”,
另一個是”request_terminate_timeout”
我的兩個設置的值一個是”40″,一個是”900″,但是這個值不是通用的,而是需要自己計算的。
計算的方式如下:
如果你的服務器性能足夠好,且寬帶資源足夠充足,PHP腳本沒有系循環或BUG的話你可以直接將”request_terminate_timeout”設置成0s。0s的含義是讓PHP-CGI一直執行下去而沒有時間限制。而如果你做不到這一點,也就是說你的PHP-CGI可能出現某個BUG,或者你的寬帶不夠充足或者其他的原因導致你的PHP-CGI能夠假死那么就建議你給”request_terminate_timeout”賦一個值,這個值可以根據你服務器的性能進行設定。一般來說性能越好你可以設置越高,20分鐘-30分鐘都可以。由于我的服務器PHP腳本需要長時間運行,有的可能會超過10分鐘因此我設置了900秒,這樣不會導致PHP-CGI死掉而出現502 Bad gateway這個錯誤。
而”max_children”這個值又是怎么計算出來的呢?這個值原則上是越大越好,php-cgi的進程多了就會處理的很快,排隊的請求就會很少。設置”max_children”也需要根據服務器的性能進行設定,一般來說一臺服務器正常情況下每一個php-cgi所耗費的內存在20M左右,因此我的”max_children”我設置成40個,20M*40=800M也就是說在峰值的時候所有PHP-CGI所耗內存在800M以內,低于我的有效內存1Gb。而如果我的”max_children”設置的較小,比如5-10個,那么php-cgi就會“很累”,處理速度也很慢,等待的時間也較長。如果長時間沒有得到處理的請求就會出現504 Gateway Time-out這個錯誤,而正在處理的很累的那幾個php-cgi如果遇到了問題就會出現502 Bad gateway這個錯誤。
以上是網上找的,原來我的老是出現 504 也不知道什么原因反正重啟一次得等待老久才能正常打開 后來搜索了下說把這個配置下
希望對于各位有幫助,老鳥們多多見諒別噴我,我才剛開始用這個 所以有啥不對的別噴我,我只是想對那些新手說下,還有論壇缺少這些帖子 ,所以我就發來分享給大家
附上數據庫 PHP配置http://www.wdlinux.cn/bbs/thread-2838-1-2.html
本人的是獨立服務器E5200 2G內存,日IP3W以內。原來剛弄得時候基本上一天掛好幾次。自己也沒有用過LINUX原來只是用的WIN 沒有仔細配置過,這次換WD很惆悵 很想換成別的,但是對于咱們菜鳥來說,那些代碼 更愁人。所以還是堅持,自己一遍遍的設置,終于弄得差不多了。 對于論壇來說 還是別用LAMP了 用LNMP 省很多內存。
我的配置不是說就是對你有用但是 你可以看著修改、。
數據庫 配置文件
最大連接數max_connections 5000
連接時間wait_timeout 5
緩沖key_buffer_size 256M
查詢緩存query_cache_size 16M
表緩存table_open_cache 512
臨時表大小tmp_table_size 6M
- key_buffer_size = 256M
- max_allowed_packet = 1M
- table_open_cache = 512
- sort_buffer_size = 1M
- read_buffer_size = 1M
- read_rnd_buffer_size = 4M
- myisam_sort_buffer_size = 64M
- thread_cache_size = 8
- query_cache_size= 16M
- thread_concurrency = 8
- max_connections = 5000
- wait_timeout = 5
- interactive_timeout = 5
- max_connect_errors = 100
- long_query_time = 1
- tmp_table_size = 6M
- #log-bin=mysql-bin
- #binlog_format=mixed
- #server-id = 1
- [mysqldump]
- quick
- max_allowed_packet = 16M
- [mysql]
- no-auto-rehash
- [myisamchk]
- key_buffer_size = 128M
- sort_buffer_size = 128M
- read_buffer = 2M
- write_buffer = 2M
其實這些具體也沒有明白到底是啥意思,就是如果256那里小點會出來很多碎片,論壇優化那里 一個小時就好幾百MB,所以弄得大了點、
PHP配置:
使用內存量 memory_limit 128M
POST最大字節數 post_max_size 8M
允許最大上傳文件 upload_max_filesize 2M
程序最長運行時間 max_execution_time 30
查找:output_buffering = Off
修改成:output_buffering = On
- disable_functions =passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen
緩存:
- extension_dir="/www/wdlinux/php/lib/php/extensions/no-debug-zts-20060613"
- extension="/eaccelerator.so"
- eaccelerator.shm_size="64"
- eaccelerator.cache_dir="/www/wdlinux/eaccelerator_cache"
- eaccelerator.enable="1" //Vevb.com
- eaccelerator.optimizer="1"
- eaccelerator.check_mtime="1"
- eaccelerator.debug="0"
- eaccelerator.filter=""
- eaccelerator.shm_max="0"
- eaccelerator.shm_ttl="600"
- eaccelerator.shm_prune_period="600"
- eaccelerator.shm_only="0"
- eaccelerator.compress="1"
- eaccelerator.compress_level="9"
緩存那里建議小點,要不WEB的很浪費,我原來設置256WEB用的都上了四百多MB.
上面有不對的希望老鳥們 能夠給指點下 有利于更多的兄弟用
還有管理員 大哥 為啥我的站 現在有時候卡的厲害,還得重啟下 還有我安裝的是LNMAP 可以隨意切換的,有時候重啟LNMP 不啟動還得自己重啟下什么原因, 用著是不錯 不過配置不會啊,老是有問題,好幾萬的流量 希望老大能多出點教程,尤其是優化的,用最直觀的教程來弄,畢竟小白還是多,技術的少啊。希望老大接受建議。還有希望老鳥們,不要自己光用,把自己的經驗發給大家。讓我們這些菜鳥 學習下。
新聞熱點
疑難解答