自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

CentOS FastCGI最大化性能揮其性能優(yōu)勢(shì)

系統(tǒng) Linux
Lighttpd 提供了很多其他Web服務(wù)器不具備的優(yōu)勢(shì),可以最大化CentOS FastCGI的性能。現(xiàn)在Mongrel/Thin/ebb都利用了一些多線程或者事件IO機(jī)制來 提供并發(fā)性能,這是CentOS FastCGI所不具備的,但遺憾的是Rails框架是單線程的,最終還是必須單進(jìn)程單線程來執(zhí)行Rails請(qǐng)求,所以這些并發(fā)優(yōu)勢(shì)無 用武之地。

對(duì)大家推薦很好使用的CentOS FastCGI系統(tǒng),像讓大家對(duì)CentOS FastCGI系統(tǒng)有所了解,然后對(duì)CentOS FastCGI系統(tǒng)全面講解介紹,希望對(duì)大家有用。

一、到底我應(yīng)該用Lighttpd,還是Nginx/Mongrel?

現(xiàn)在Nginx/Mongrel的部署方式越來越受歡迎了,很多人置疑Lighttpd/FastCGI,并且現(xiàn)在也涌現(xiàn)了一些比Mongrel性能更好的例如Thin,ebb等ruby應(yīng)用服務(wù)器,那Lighttpd/FastCGI真的過時(shí)了嗎?

Lighttpd 提供了很多其他Web服務(wù)器不具備的優(yōu)勢(shì),可以最大化CentOS FastCGI的性能。現(xiàn)在Mongrel/Thin/ebb都利用了一些多線程或者事件IO機(jī)制來 提供并發(fā)性能,這是CentOS FastCGI所不具備的,但遺憾的是Rails框架是單線程的,最終還是必須單進(jìn)程單線程來執(zhí)行Rails請(qǐng)求,所以這些并發(fā)優(yōu)勢(shì)無 用武之地。但一些其他Ruby的Web框架例如camping,weavers已經(jīng)開始支持ruby多線程,提供了比Rails好得多的性 能,mongrel/ebb只有在這些web框架上面才能發(fā)揮其性能優(yōu)勢(shì)。

有人會(huì)問,Rails會(huì)不會(huì)改成多線程?我認(rèn)為不可能:一來Rails的多進(jìn)程被證明是一種古老的、但是高可靠性、高擴(kuò)展性的部署方式,沒有改的必要性;二來真要改成多線程,改動(dòng)實(shí)在太大了,整個(gè)底層框架都要改。

所以只要你還是用Rails框架,Lighttpd/CentOS FastCGI就是性能最好的部署方案。

二、ubuntu Linux安裝ruby碰到的缺少readline,zlib庫(kù)的問題?

有些人的ubuntu安裝的庫(kù)不全,比方說缺少readline庫(kù),缺少zlib庫(kù),可能會(huì)導(dǎo)致自己手工編譯安裝ruby的失敗,那么就用apt-get先把庫(kù)安裝好。

三、Lighttpd安裝遇到的缺少pcre庫(kù)的問題?

RHEL/CentOS用戶可能要用yum安裝一下pcre/pcre-devel這兩個(gè)庫(kù),ubuntu用戶用apt-get安裝一下,Linux熟手 也可以自己下載源代碼編譯安裝,Pcre是Perl兼容的正則表達(dá)式庫(kù),Lighttpd的Rewrite功能需要它。

四、Lighttpd配置過程當(dāng)中遇到的種種問題?

1、我用的是ubuntu,你說的控制腳本rc.lighttpd我跑不了,執(zhí)行就會(huì)報(bào)錯(cuò)

rc.lighttpd這個(gè)腳本是針對(duì)SuSE Linux寫的,此外還提供了一個(gè)rc.lighttpd.redhat是針對(duì)RedHat Linux寫的,沒有針對(duì)ubuntu的版本,但是你自己寫一個(gè)控制腳本,也不過是舉手之勞:

Java代碼 #!/bin/sh  case "$1" in   start)  /usr/local/lighttpd/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf > /dev/null 2>&1  ;;  stop)   killall lighttpd  ;;  restart)   $0 stop  sleep 1  $0 start   ;;  *)   echo "Usage: lighttpd.sh {start|stop|restart}"   ;;   esac  exit 0   view plaincopy to clipboardprint?
#!/bin/sh  case "$1" in    start)              /usr/local/lighttpd/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf > /dev/null 2>&1     ;;   stop)      killall lighttpd     ;;   restart)     $0 stop    sleep

1    $0 start     ;;   *)    echo "Usage: lighttpd.sh {start|stop|restart}"    ;;  esac  exit 0    

創(chuàng)建一個(gè)shell腳本,內(nèi)容如上,chmod u+x lighttpd.sh,這個(gè)腳本就可以用來啟動(dòng)關(guān)閉和重起lighttpd了

2、啟動(dòng)Lighttpd的時(shí)候報(bào)錯(cuò),說XXX目錄找不到

Lighttpd啟動(dòng)之后默認(rèn)情況下會(huì)寫access log,error log,如果你啟動(dòng)了壓縮過程,還會(huì)把文件壓縮過的版本放在壓縮目錄下面,所以檢查一下你的lighttpd.conf配置文件,是不是這些目錄還沒有,或者路徑不對(duì)。

3、啟動(dòng)lighttpd可以訪問,但如果配置了Rails,就無法啟動(dòng)

如果無法啟動(dòng),要學(xué)會(huì)自己看Lighttpd的error log和Rails項(xiàng)目的log目錄下面的CentOS FastCGIcrash log,在這兩個(gè)log文件當(dāng)中可以找到出錯(cuò)原因。其中一種常犯的錯(cuò)誤是:Rails項(xiàng)目在Windows上面創(chuàng)建和開發(fā),最后部署到Linux Server上面。這種情況下dispatch.fcgi這個(gè)腳本的ruby解析器路徑是 #!c:/ruby/bin/ruby.exe 這個(gè)路徑在Linux上面肯定是錯(cuò)誤的,你可以改成#!/usr/bin/env ruby,或者干脆在Linux上面創(chuàng)建該Rails項(xiàng)目。此外在windows上面創(chuàng)建的Rails項(xiàng)目,dispatch.fcgi沒有可執(zhí)行權(quán)限, 這也需要你在Linux上面先賦予可執(zhí)行權(quán)限才行。你可以嘗試著手工運(yùn)行該腳本cd public && ./dispatch.fcgi,看看是否可以運(yùn)行。

4、啟動(dòng)lighttpd報(bào)錯(cuò),說找不到socket路徑

我在前面安裝文檔中給出來的配置內(nèi)容如下:


Java代碼 $HTTP["host"] == "www.xxx.com" {  server.document-root = "/yourrails/public"  server.error-handler-404 = "/dispatch.fcgi"   CentOS FastCGI.server = (".fcgi" => 
("localhost" => 
("min-procs" => 10,  
 "max-procs" => 10, 
"socket" => "/tmp/lighttpd/socket/rails.socket", 
"bin-path" => "/yourrails/public/dispatch.fcgi", 
"bin-environment" => ("RAILS_ENV" => "production")  
view plaincopy to clipboardprint?
$HTTP["host"] == "www.xxx.com" {  server.document-root = "/yourrails/public"  server.error-handler-404 = "/dispatch.fcgi"  fastcgi.server = (".fcgi" =>     ("localhost" =>       ("min-procs" => 10,        "max-procs" => 10,        "socket" => "/tmp/lighttpd/socket/rails.socket",        "bin-path" => "/yourrails/public/dispatch.fcgi",        "bin-environment" => ("RAILS_ENV" => "production")       )     )  ) }  

就算照抄你要改改路徑吧?這個(gè)demo當(dāng)中的socket路徑是/tmp/lighttpd/socket/rails.socket,那你要照 抄,先檢查一下有沒有/tmp/lighttpd/sock目錄總是應(yīng)該的吧?其實(shí)用啥路徑都無妨,關(guān)鍵就是別照抄,領(lǐng)會(huì)原理,根據(jù)自己的環(huán)境做相應(yīng)的調(diào) 整。

5、lighttpd可以啟動(dòng),但是訪問Rails應(yīng)用出現(xiàn)404錯(cuò)誤,找不到頁(yè)面在lighttpd的虛擬域配置里面有一項(xiàng) Java代碼 server.error-handler-404 = "/dispatch.fcgi"  view plaincopy to clipboardprint?
server.error-handler-404 = "/dispatch.fcgi"  
意思是當(dāng)lighttpd找不到URL對(duì)應(yīng)的硬盤文件,就會(huì)調(diào)用Rails的dispatch.fcgi去處理該URL請(qǐng)求,這也是 lighttpd訪問Rails的主要方式,其性能比URL轉(zhuǎn)發(fā)要快。如果你在配置文件里面忽略了這一行,lighttpd就會(huì)直接返回404錯(cuò)誤,而不 是交給Rails處理。

6、重起lighttpd以后,CentOS FastCGI進(jìn)程不關(guān)閉,導(dǎo)致多次重起lighttpd之后,CentOS FastCGI進(jìn)程堆積越來越多?

正常情況下,關(guān)閉Lighttpd以后,dispatch進(jìn)程就會(huì)銷毀,但是在dispatch進(jìn)程處理請(qǐng)求的時(shí)候關(guān)閉 lighttpd,dispatch進(jìn)程并不會(huì)馬上關(guān)閉,而是處理完畢當(dāng)前請(qǐng)求,才會(huì)關(guān)閉掉。一些極端情況下,可能會(huì)導(dǎo)致dispatch進(jìn)程一直不關(guān) 閉,dispatch進(jìn)程就會(huì)越來越多。解決辦法很簡(jiǎn)單 killall -9 dispatch.fcgi,只管殺進(jìn)程就好了。

7、我的lighttpd和CentOS FastCGI部署在不同的服務(wù)器,怎么配置呢?

這種情況下,Lighttpd只是連接遠(yuǎn)程服務(wù)器的TCP端口,而不負(fù)責(zé)啟動(dòng)dispatch.fcgi進(jìn)程,因此需要自己寫腳本啟動(dòng)關(guān)閉 dispatch.fcgi進(jìn)程。lighttpd提供了一個(gè)spawn-fcgi的程序,可以用來啟動(dòng)dispatch.fcgi進(jìn)程,監(jiān)聽TCP端 口,你可以自己寫一個(gè)shell腳本來完成這個(gè)工作。另外spawn-fcgi還可以啟動(dòng)dispatch.fcgi進(jìn)程,創(chuàng)建本機(jī)的unix socket端口,和本機(jī)lighttpd通訊,例如:

例如: Java代碼 #!/bin/sh 
DISPATCH_PATH=/yourrailsapp/public/dispatch.fcgi 
SOCKET_PATH=/tmp/lighttpd/socket 
RAILS_ENV=production 
export RAILS_ENV 
case "$1" in  start) 

for num in 0 1 2 3 4 5 6 7 8 9  do /usr/local/lighttpd/bin/spawn-fcgi -f $DISPATCH_PATH -s $SOCKET_PATH/rails.socket-$num  done  ;;  stop)  killall -9 dispatch.fcgi 
;;  restart)  $0 stop  $0 start  ;;  *)   echo "Usage: dispatch.sh {start|stop|restart}"  ;;  esac  exit 0 

view plaincopy to clipboardprint?#!/bin/sh  DISPATCH_PATH=/yourrailsapp/public/dispatch.fcgi SOCKET_PATH=/tmp/lighttpd/socket RAILS_ENV=production export RAILS_ENV  case "$1" in    start)     for num in 0 1 2 3 4 5 6 7 8 9     do      /usr/local/lighttpd/bin/spawn-fcgi -f $DISPATCH_PATH -s $SOCKET_PATH/rails.socket-$num     done     ;;    stop)     killall -9 dispatch.fcgi     ;;    restart)     $0 stop     $0 start     ;;      *)      echo "Usage: dispatch.sh {start|stop|restart}"     ;;    esac  exit 0  

執(zhí)行 ./dispatch.sh start 將啟動(dòng)10個(gè)dispatch.fcgi進(jìn)程,在/tmp/lighttpd/sock目錄下面創(chuàng)建了10個(gè)unix socket文件,然后配置lighttpd去連接這10個(gè)socket文件:

Java代碼 $HTTP["host"] =~ "www.xxx.com$" {  server.document-root = "/yourrails/public"  server.error-handler-404 = "/dispatch.fcgi"  CentOS FastCGI.server = (".fcgi" =>   ( 

("socket"=>"/tmp/lighttpd/socket/rails.socket-0"), 
("socket"=>"/tmp/lighttpd/socket/rails.socket-1"), 
("socket"=>"/tmp/lighttpd/socket/rails.socket-2"), 
("socket"=>"/tmp/lighttpd/socket/rails.socket-3"), 
("socket"=>"/tmp/lighttpd/socket/rails.socket-4"), 
("socket"=>"/tmp/lighttpd/socket/rails.socket-5"), 
("socket"=>"/tmp/lighttpd/socket/rails.socket-6"), 
("socket"=>"/tmp/lighttpd/socket/rails.socket-7"),  
("socket"=>"/tmp/lighttpd/socket/rails.socket-8"), 
("socket"=>"/tmp/lighttpd/socket/rails.socket-9")      

view plaincopy to clipboardprint?
$HTTP["host"] =~ "www.xxx.com___FCKpd___4quot; {   server.document-root = "/yourrails/public"   server.error-handler-404 = "/dispatch.fcgi"   fastcgi.server = (".fcgi" =>     (       ("socket"=>"/tmp/lighttpd/socket/rails.socket-0"),       ("socket"=>"/tmp/lighttpd/socket/rails.socket-1"),       ("socket"=>"/tmp/lighttpd/socket/rails.socket-2"),       ("socket"=>"/tmp/lighttpd/socket/rails.socket-3"),       ("socket"=>"/tmp/lighttpd/socket/rails.socket-4"),       ("socket"=>"/tmp/lighttpd/socket/rails.socket-5"),       ("socket"=>"/tmp/lighttpd/socket/rails.socket-6"),       ("socket"=>"/tmp/lighttpd/socket/rails.socket-7"),       ("socket"=>"/tmp/lighttpd/socket/rails.socket-8"),       ("socket"=>"/tmp/lighttpd/socket/rails.socket-9")          )   ) }  

這樣做的好處是,每次重新部署應(yīng)用,就不需要重起lighttpd了,只需要執(zhí)行自己的dispatch.sh來重起dispatch.fcgi進(jìn)程就可以了。同時(shí)也可以很好的解決上一個(gè)CentOS FastCGI進(jìn)程堆積的問題。

如果遠(yuǎn)程部署,配置方式是一樣的,就是lighttp連接的端口改為: Java代碼
("host"=>"192.168.0.1, "port"=>3001), 
("host"=>"192.168.0.1, "port"=>3002), 

view plaincopy to clipboardprint?("host"=>"192.168.0.1, "port"=>3001), ("host"=>"192.168.0.1, "port"=>3002), ......   dispatch.sh創(chuàng)建dispatch.fcgi進(jìn)程的時(shí)候,使用 -t 參數(shù)創(chuàng)建tcp端口,而不是 -s 創(chuàng)建unix socket文件即可。

【編輯推薦】

  1. CentOS RoR應(yīng)用性能優(yōu)化的實(shí)戰(zhàn)經(jīng)驗(yàn)
  2. CentOS WEB緩存服務(wù)器程序使用比較靈活
  3. CentOS Oracle測(cè)試運(yùn)行使用root用戶修改
  4. CentOS NTFS安裝和配置支持所有符合POSIX標(biāo)準(zhǔn)的磁盤操作
  5. Linux CentOS常用命令的各種使用方法
責(zé)任編輯:佚名 來源: csdn
相關(guān)推薦

2012-07-11 22:27:21

惠普服務(wù)網(wǎng)絡(luò)

2009-01-05 19:07:03

服務(wù)器虛擬化虛擬機(jī)

2020-08-24 22:26:21

物聯(lián)網(wǎng)數(shù)據(jù)IOT

2024-12-20 09:45:09

C#Windows線程

2019-12-12 15:07:44

虛擬機(jī)性能效率

2010-03-19 09:31:52

虛擬化性能

2011-12-08 10:10:57

私有云

2023-03-02 09:57:03

2017-10-18 11:14:02

容器虛擬機(jī)云平臺(tái)

2020-04-22 14:03:30

云服務(wù)云計(jì)算企業(yè)

2016-04-12 10:02:22

2011-11-15 09:45:43

云計(jì)算云應(yīng)用

2014-07-30 09:40:22

OracleERP云SaaS

2012-06-13 09:35:41

存儲(chǔ)虛擬化

2013-05-14 13:28:37

利用大數(shù)據(jù)價(jià)值

2011-07-20 13:23:48

SaaS云計(jì)算

2020-07-26 18:55:31

存儲(chǔ)緩存IT

2022-03-10 16:39:51

Kyligence數(shù)據(jù)湖OLAP

2014-04-25 11:02:25

虛擬化虛擬化技術(shù)

2011-07-18 09:39:31

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)