使用Graphviz時候遇到這樣一個問題
          IOError: Renderer type: "gif" not recognized. Use one of: canon cmap cmapx dia dot fig hpgl imap ismap mif mp pcl pic plain plain-ext ps ps2 svg svgz vtx xdot
          表現(xiàn)在無法生成gif或者png圖像
          應該是官方一個bug
          解決方案:
          安裝 graphviz-gd
          yum search graphviz-gd
          ========================= Matched: graphviz-gd =========================
          graphviz-gd.x86_64 : Graphviz plugin for renderers based on gd
          好了,裝上這個東西就ok了
          posted @ 2014-02-13 13:25 小馬歌 閱讀(2885) | 評論 (0)編輯 收藏
           

          一些運行在Nginx上的網(wǎng)站有時候會出現(xiàn)“502 Bad Gateway”錯誤,有些時候甚至頻繁的出現(xiàn)。以下是小編搜集整理的一些Nginx 502錯誤的排查方法,供參考:

            Nginx 502錯誤的原因比較多,是因為在代理模式下后端服務器出現(xiàn)問題引起的。這些錯誤一般都不是nginx本身的問題,一定要從后端找原因!但nginx把這些出錯都攬在自己身上了,著實讓nginx的推廣者備受置疑,畢竟從字眼上理解,bad gateway?不就是bad nginx嗎?讓不了解的人看到,會直接把責任推在nginx身上,希望nginx下一個版本會把出錯提示寫稍微友好一些,至少不會是現(xiàn)在簡單的一句 502 Bad Gateway,另外還不忘附上自己的大名。

          Nginx 502的觸發(fā)條件

            502錯誤最通常的出現(xiàn)情況就是后端主機當機。在upstream配置里有這么一項配置:proxy_next_upstream,這個配置指定了 nginx在從一個后端主機取數(shù)據(jù)遇到何種錯誤時會轉到下一個后端主機,里頭寫上的就是會出現(xiàn)502的所有情況拉,默認是error timeout。error就是當機、斷線之類的,timeout就是讀取堵塞超時,比較容易理解。我一般是全寫上的:

          proxy_next_upstream error timeout invalid_header http_500 http_503;

            不過現(xiàn)在可能我要去掉http_500這一項了,http_500指定后端返回500錯誤時會轉一個主機,后端的jsp出錯的話,本來會打印一堆 stacktrace的錯誤信息,現(xiàn)在被502取代了。但公司的程序員可不這么認為,他們認定是nginx出現(xiàn)了錯誤,我實在沒空跟他們解釋502的原理 了……

          503錯誤就可以保留,因為后端通常是apache resin,如果apache死機就是error,但resin死機,僅僅是503,所以還是有必要保留的。

          解決辦法

          遇到502問題,可以優(yōu)先考慮按照以下兩個步驟去解決。

          1、查看當前的PHP FastCGI進程數(shù)是否夠用:

          netstat -anpo | grep "php-cgi" | wc -l

          如果實際使用的“FastCGI進程數(shù)”接近預設的“FastCGI進程數(shù)”,那么,說明“FastCGI進程數(shù)”不夠用,需要增大。

          2、部分PHP程序的執(zhí)行時間超過了Nginx的等待時間,可以適當增加nginx.conf配置文件中FastCGI的timeout時間,例如:

          http  {
          fastcgi_connect_timeout 300;
          fastcgi_send_timeout 300;
          fastcgi_read_timeout 300;
          ......
          }
          ......

            php.ini中memory_limit設低了會出錯,修改了php.ini的memory_limit為64M,重啟nginx,發(fā)現(xiàn)好了,原來是PHP的內(nèi)存不足了。

            如果這樣修改了還解決不了問題,可以參考下面這些方案:

          一、max-children和max-requests

            一臺服務器上運行著nginx php(fpm) xcache,訪問量日均 300W pv左右。

            最近經(jīng)常會出現(xiàn)這樣的情況:php頁面打開很慢,cpu使用率突然降至很低,系統(tǒng)負載突然升至很高,查看網(wǎng)卡的流量,也會發(fā)現(xiàn)突然降到了很低。這種情況只持續(xù)數(shù)秒鐘就恢復了。

            檢查php-fpm的日志文件發(fā)現(xiàn)了一些線索。

          Sep 30 08:32:23.289973 [NOTICE] fpm_unix_init_main(), line 271: getrlimit(nofile): max:51200, cur:51200  Sep 30 08:32:23.290212 [NOTICE] fpm_sockets_init_main(), line 371: using inherited socket fd=10, “127.0.0.1:9000″  Sep 30 08:32:23.290342 [NOTICE] fpm_event_init_main(), line 109: libevent: using epoll  Sep 30 08:32:23.296426 [NOTICE] fpm_init(), line 47: fpm is running, pid 30587

            在這幾句的前面,是1000多行的關閉children和開啟children的日志。

            原來,php-fpm有一個參數(shù) max_requests,該參數(shù)指明了,每個children最多處理多少個請求后便會被關閉,默認的設置是500。因為php是把請求輪詢給每個 children,在大流量下,每個childre到達max_requests所用的時間都差不多,這樣就造成所有的children基本上在同一時間 被關閉。

            在這期間,nginx無法將php文件轉交給php-fpm處理,所以cpu會降至很低(不用處理php,更不用執(zhí)行sql),而負載會升至很高(關閉和開啟children、nginx等待php-fpm),網(wǎng)卡流量也降至很低(nginx無法生成數(shù)據(jù)傳輸給客戶端)

            解決問題很簡單,增加children的數(shù)量,并且將 max_requests 設置未 0 或者一個比較大的值:

            打開 /usr/local/php/etc/php-fpm.conf調(diào)大以下兩個參數(shù)(根據(jù)服務器實際情況,過大也不行)

          <value name="max_children">5120</value>  <value name="max_requests">600</value>

            然后重啟php-fpm。

          二、增加緩沖區(qū)容量大小

            將nginx的error log打開,發(fā)現(xiàn)“pstream sent too big header while reading response header from upstream”這樣的錯誤提示。查閱了一下資料,大意是nginx緩沖區(qū)有一個bug造成的,我們網(wǎng)站的頁面消耗占用緩沖區(qū)可能過大。參考老外寫的修 改辦法增加了緩沖區(qū)容量大小設置,502問題徹底解決。后來系統(tǒng)管理員又對參數(shù)做了調(diào)整只保留了2個設置參數(shù):client head buffer,fastcgi buffer size。

          三、request_terminate_timeout

            如果主要是在一些post或者數(shù)據(jù)庫操作的時候出現(xiàn)502這種情況,而不是在靜態(tài)頁面操作中常見,那么可以查看一下php-fpm.conf設置中的一項:

          request_terminate_timeout

          這個值是max_execution_time,就是fast-cgi的執(zhí)行腳本時間。

          0s

          0s為關閉,就是無限執(zhí)行下去。(當時裝的時候沒仔細看就改了一個數(shù)字)問題解決了,執(zhí)行很長時間也不會出錯了。優(yōu)化fastcgi中,還可以改改這個值5s 看看效果。

          php-cgi進程數(shù)不夠用、php執(zhí)行時間長、或者是php-cgi進程死掉,都會出現(xiàn)502錯誤。

          posted @ 2014-02-12 18:48 小馬歌 閱讀(1115) | 評論 (0)編輯 收藏
           
          感謝Rockux的投遞
          看完之后,終于明白為什么優(yōu)秀的工程師都去了/想去facebook,因為那里是工程師們的天堂。我對facebook的運轉著迷。這是一個很獨特的環(huán)境,不容易被復制(他們的體系并不適合所有的公司,即使他們努力嘗試過)。下面是我和facebook的朋友們關于他們?nèi)绾伍_發(fā)和管理項目的記錄。
          現(xiàn)在距離我收集的這些信息又過去6個月了,我相信facebook肯定又對他們的項目開發(fā)實踐進行了改進。所以這些記錄可能會有點過時。同時facebook的工程師驅(qū)動文化也越來越為大眾所知。非常感謝那些幫助我整理這篇文章的facebook的朋友們。

          記錄:

          • 截止到2010年6月,facebook有將近2000名員工,10個月前只有1100名,一年之間差不多翻了一番。
          • 兩個最大的部門是工程師和運維,每個部門大概都是400-500人。這兩個部門人數(shù)大約占了公司的一半。
          • 產(chǎn)品經(jīng)理與工程師的比例大約為1-7到1-10。
          • 每個工程師入職時,都要接收4-6周的培訓,通過修補bugs和聽高級開發(fā)工程師的課程來熟悉facebook。
          • 培訓結束后,每個工程師都可以接觸線上的數(shù)據(jù)庫(更大的權力意味著更大的責任,也有一份"勿做清單",不然可能會被開,比如共享用戶的隱私數(shù)據(jù))。
          • 有非常牢靠的安全體系,以免有人不小心/故意做了些不好的事。
          • 每個工程師可以修改facebook的任何代碼,隨時可以遷入。
          • 濃厚的工程師驅(qū)動文化。"產(chǎn)品經(jīng)理基本可以被忽略",這是facebook一名員工的話。工程師可以修改流程的細節(jié),重新安排工作任務,隨時植入自己的想法。
          • 在每月的跨部門會議上,由工程師來匯報工作進度,市場部和產(chǎn)品經(jīng)理會出席會議,也可以做些簡短的發(fā)言,但如果說得太多,很可能就會被打小報告。他們確實想讓工程師來主導產(chǎn)品的開發(fā),對自己的產(chǎn)品負責。
          • 項目需要的資源都是自愿的
          • 一個產(chǎn)品經(jīng)理把工程師們召集到一起,讓他們對他的想法產(chǎn)生興趣。
          • 工程師們決定開發(fā)那些讓他們感興趣的特性。
          • 工程師跟他們的經(jīng)理說:"我下周想開發(fā)這5個新特性"。
          • 經(jīng)理會讓工程師獨立開發(fā),可能有時會讓他優(yōu)先完成一些特性。
          • 工程師獨立完成所有的特性——前端/后端/數(shù)據(jù)庫,等等所有相關的部分。如果需要得到設計人員的幫助,需要先讓設計人員對你的想法產(chǎn)生興趣。其他如架構之類的也一樣。但總體來說,工程師要獨立完成所有的任務。
          • 對于某個特性是否值得開發(fā)的爭論,通常是這么解決的:花一個星期的時間完成他,并在小部分人群中(如1%)進行測試。
          • 工程師常常希望解決難題,這能獲得聲望和尊敬。他們很難對前端項目或UI設計產(chǎn)生太大的興趣。這跟其他公司可能正好相反。在facebook,后端任務,比如新的feed算法,廣告投放算法,memcache優(yōu)化等等,是工程師真正感興趣的。
          • 所有的代碼修改都要進行審核(通過一個或多個工程師),但News Feed是個例外,因為太重要了,Zuckerberg會親自review。
          • 所有的修改至少要被一個人審核,而且這個系統(tǒng)可以讓任何人很方便地審核其他人的代碼,即使你沒有邀請他
          • 工程師負責測試,代碼修復,和維護自己的項目。
          • 每個辦公室或通過VPN連接的員工會使用下一版的facebook,這個版本的facebook會經(jīng)常更新,通常比公開的早1-12小時。所有的員工被強烈建議提交bugs,而且通常會很快被修復。
          • 很奇怪只有很少的QA或自動測試——"大部分工程師都能寫出基本沒有bug的代碼,只是在其他公司他們不需要這么做。如果有QA部門,他們只要把代碼寫完,扔給他們就行了"
          • [針對上一條]我們有自動測試,代碼發(fā)布前必須要通過測試。我們不相信"所有的工程師都能寫出沒有bug的代碼",畢竟這是一個商業(yè)公司。
          • 很奇怪,缺少產(chǎn)品經(jīng)理的影響和控制——產(chǎn)品經(jīng)理是很獨立的和自由的。產(chǎn)生影響力的關鍵是與工程師和工程師的領導們們搞好關系。需要大致了解技術,不要提一些愚蠢的想法。
          • 所有提交的代碼每周二打包一次。
          • 只要多一分努力,終于一天會發(fā)生改變。
          • 星期二的代碼發(fā)布,需要所有的提交過代碼的工程師在場。
          • 代碼打包前,工程師必須在一個特殊的IRC channel上。
          • 運維執(zhí)行打包過程
          • facebook有大約60000臺服務器
          • 有9個代碼發(fā)布級別
          • 最小的級別只有6臺服務器
          • 星期二的代碼發(fā)布會先發(fā)布到6臺服務器上,運維組會檢測這6臺服務器的反應,保證代碼正常工作,然后再提交到下一級
          • 如果發(fā)布出現(xiàn)了一些問題(如報錯等等),那么就停止下一級的部署,提交出錯代碼的工程師負責修復問題,然后從頭繼續(xù)發(fā)布。
          • 所以一次發(fā)布可能會經(jīng)歷幾次重復:1-2-3-fix. 回到1. 1-2-3-4-5-fix. 回到1. 1-2-3-4-5-6-7-8-9
          • 運維組是受過嚴格訓練,倍受尊敬,而且有商業(yè)意識的。他們的工作包括分析錯誤日志,負載和內(nèi)存狀態(tài)等等。還包括用戶行為。
          • 代碼發(fā)布期間,運維組使用IRC-based頁面系統(tǒng),可以通過facebook/email/irc/im/sms ping每一個工程師,如果需要他們注意的話。對運維組不做回應是一件很羞愧的事。
          • 代碼一旦發(fā)布到第9級,并且穩(wěn)定運行,就算發(fā)布成功了。
          • 如果一個特性沒有按時完成,也沒什么大不了的,下次完成時一并發(fā)布即可。
          • 如果被svn-blamed,public shamed或工作經(jīng)常疏忽就很可能被開除。"這是一個高效的文化"。不夠高效或者不夠聰明的員工會被剔除。管理層會在6個月的時間里觀察你表現(xiàn),如果不合格,只能說再見。每一級都是這個待遇,即使是C級別和VP級別,如果不夠高效,也會被開除。
          • 被責罵不會導致解雇。我們特別尊重別人,原諒別人。大部分高級工程師都或多或少犯過一些嚴重的錯誤,包括我。但沒有人因此被解雇。
          • 我也沒有遇到過因為上面提到過的犯錯誤而被解雇。有些人犯了錯,他們會非常努力地去修復,也讓其他人得到了學習。
          posted @ 2014-01-23 15:21 小馬歌 閱讀(362) | 評論 (0)編輯 收藏
           
          PHPUnit
          是一個輕量級的PHP測試框架。它是在PHP5下面對JUnit3系列版本的完整移植,是xUnit測試框架家族的一員(它們都基于模式先鋒Kent Beck的設計)

          單元測試是幾個現(xiàn)代敏捷開發(fā)方法的基礎,使得PHPUnit成為許多大型PHP項目的關鍵工具。這個工具也可以被Xdebug擴展用來生成代碼覆蓋率報告 ,并且可以與phing集成來自動測試,最合它還可以和Selenium整合來完成大型的自動化集成測試。
          資料:http://phpunit.de/documentation.html

          2 composer
          項目依賴管理工具 資料:http://getcomposer.org/doc/00-intro.md#installation-nix

          3
           syslog-ng  
          集中日志服務器,相比syslog更有優(yōu)勢 資料:http://www.gaizaoren.org/archives/428

          posted @ 2014-01-23 11:24 小馬歌 閱讀(297) | 評論 (0)編輯 收藏
           

          轉自:http://my.oschina.net/u/200745/blog/36662

          1.引用文件方式

          對include()來說,在include()執(zhí)行時文件每次都要進行讀取和評估;而對于require()來說,文件只處理一次(實際上,文件內(nèi)容替換了require()語句)。這就意味著如果有包含這些指令之一的代碼和可能執(zhí)行多次的代碼,則使用require()效率比較高。另一方面,如果每次執(zhí)行代碼時相讀取不同的文件,或者有通過一組文件疊代的循環(huán),就使用include(),因為可以給想要包括的文件名設置一個變量,當參數(shù)為include()時使用這個變量。

           2.是否有條件引用

          在PHP變成中,include()與require()的功能相同,但在用法上卻有一些不同,include()是有條件包含函數(shù),而require()則是無條件包含函數(shù)。例如在下面的一個例子中,如果變量$somgthing為真,則將包含文件somefile:
          if($something){
          include("somefile");
          }
          但不管$something取何值,下面的代碼將把文件somefile包含進文件里:
          if($something){
          require("somefile");
          }
          下面的這個有趣的例子充分說明了這兩個函數(shù)之間的不同。
          $i = 1;
          while ($i < 3) {
          require("somefile.$i");
          $i++;
          }
          在這段代碼中,每一次循環(huán)的時候,程序都將把同一個文件包含進去。很顯然這不是程序員的初衷,從代碼中我們可以看出這段代碼希望在每次循環(huán)時,將不同的文件包含進來。如果要完成這個功能,必須求助函數(shù)include():
          $i = 1;
          while ($i < 3) {
          include("somefile.$i");
          $i++;
          }

           

          3.報錯

           

          用例子來說話,寫兩個php文件,名字為test1.php  和test2.php,注意相同的目錄中,不要存在一個名字是test999.php的文件。
          test.php
          <?PHP
          include  (”test999.php”);
          echo  “abc”;
          ?>

          test2.php
          <?PHP
          require (”test999.php”)
          echo  “abc”;
          ?>

          瀏覽第一個文件,因為沒有找到test999.php文件,我們看到了報錯信息,同時,報錯信息的下邊顯示了abc,你看到的可能是類似下邊的情況:
          Warning: include(test1aaa.php) [function.include]: failed to open stream: No such file or directory in D:\WebSite\test.php on line 2

          Warning: include() [function.include]: Failed opening ‘test1aaa.php’ for inclusion (include_path=’.;C:\php5\pear’) in D:\WebSite\test.php on line 2
          abc

          瀏覽第二個文件,因為沒有找到test999.php文件,我們看到了報錯信息,但是,報錯信息的下邊沒有顯示abc,你看到的可能是類似下邊的情況:
          Warning: require(test1aaa.php) [function.require]: failed to open stream: No such file or directory in D:\WebSite\test.php on line 2

          Fatal error: require() [function.require]: Failed opening required ‘test1aaa.php’ (include_path=’.;C:\php5\pear’) in D:\WebSite\test.php on line 2

          現(xiàn)在就能很清楚的知道include和require的區(qū)別:include引入文件的時候,如果碰到錯誤,會給出提示,并繼續(xù)運行下邊的代碼,require引入文件的時候,如果碰到錯誤,會給出提示,并停止運行下邊的代碼。

          posted @ 2013-12-25 20:53 小馬歌 閱讀(258) | 評論 (0)編輯 收藏
           
               摘要: from:http://www.searchtb.com/2012/06/rolling-curl-best-practices.html在實際項目或者自己編寫小工具(比如新聞聚合,商品價格監(jiān)控,比價)的過程中, 通常需要從第3方網(wǎng)站或者API接口獲取數(shù)據(jù), 在需要處理1個URL隊列時, 為了提高性能, 可以采用cURL提供的curl_multi_*族函數(shù)實現(xiàn)簡單的并發(fā).本文將探討兩種具體的實現(xiàn)方...  閱讀全文
          posted @ 2013-12-13 14:15 小馬歌 閱讀(469) | 評論 (0)編輯 收藏
           
          摘要:Polymer是由原Palm webOS開發(fā)Enyo框架的團隊加盟Google后打造的,基于Shadow DOM、Custom Elements、MDV等最新瀏覽器特性,支持Web Components。

          今年的Google I/O大會,絕對是一場為開發(fā)者所準備的盛會發(fā)布多個軟件產(chǎn)品與服務,并且主要以發(fā)布平臺和服務為主,比如讓Android開發(fā)者稱贊的Android Studio、推出Google Play Game服務、對地圖進行重大升級等。而在Web平臺領域,Google則發(fā)布了最新的Web UI庫Polymer。

          Polymer基于Shadow DOM、Custom Elements、MDV等最新瀏覽器特性,代表了下一代Web框架的方向:一切皆組件、盡量減少代碼量、盡量減少框架限制。由加盟Google的原Palm webOS開發(fā)團隊打造。

           

          架構圖

          快速入門

          1.把項目拷貝到解決方案的根目錄文件夾中,參考 Get the code

          1
          git clone git://github.com/Polymer/polymer.git --recursive
          2.啟動Web服務器

          3.在主頁面引用polymer.js

          1
          <script src="Polymer/polymer.js"></script>
          4.閱讀開始指南

          5.學習如何使用Polymer內(nèi)核快速搭建Web組件

          6.玩轉toolkit-ui示例(必須在Web服務器上運行)

          7.加入mailing list,提問并且得到相應地回復。

          Polymer內(nèi)核

          Polymer內(nèi)核代碼由polymer.js這個文件提供,其提供了一個薄層代碼來表示Polymer選項,并且提供了所有組件使用的糖。

          1. 組件聲明
          2. Web組件聲明代碼如下所示:

            1
            2
            3
            4
            5
            6
            7
            8
            <element name="tag-name">
            <template>
            <!-- shadow DOM here -->
            </template>
            <script>
            // lifecycle setup here
            </script>
            </element>

            在該組件中添加Polymer.register生命周期來初始化組件的<script>塊,如下所示:

            1
            2
            3
            4
            5
            6
            7
            8
            <font face="Menlo, Monaco, monospace, sans-serif"><element name="tag-name">
              <template>
                <!-- shadow DOM here -->
              </template>
              <script>
                Polymer.register(this);
              </script>
            </element></font>

          3. 元素初始化
          4. 第一個參數(shù)Polymer.register是引用到<element>元素里的,因為腳本在element標記里運行,所以參數(shù)就設為“this”。

            你可以提供第二個對象參數(shù)到Polymer.register里去定義對象原型,在下面的代碼里,該組件初始化了一個message屬性和ready方法。

            1
            2
            3
            4
            5
            6
            Polymer.register(this, {
            message: "Hello!",
            ready: function() {
            // component is ready now, we can do stuff
            }
            });

          目前,Polymer還處于初期階段,它和其他框架一樣,盡可能地擁抱HTML。它的目標是通過使用像Custom Elements和Shadow DOM這些新興的Web標準的少量獨立polyfill發(fā)展Web平臺。此外,應用于移動平臺也是其中的核心目標之一。Polymer開發(fā)團隊正在研究響應式組件,讓其可以正確無誤地在臺式機、平板電腦、手機上進行自動化配置。

          當然,Polymer的誕生也意味著Google現(xiàn)在有三個相互競爭的Web應用開發(fā)庫:Polymer、Dart(也具有UI開發(fā)功能)和AngularJS。

          對于Polymer,開發(fā)者有哪些話要說呢?讓我們一起來看下:

          清風一二兩:Palm webOS用另一種方式重生?

          三合一趙:Enyo的Google版~換湯不換藥~

          劉晗的微博:在HTML領域離標準太遠自己搞一套,出路不大。特別是像這種綁定機制,貌似理念是MVC,但MVC這種東西做簡單頁面還行。

          eldude:聲明性質(zhì)、封裝、數(shù)據(jù)綁定、屬性和事件驅(qū)動API這些都是數(shù)量級的,要比現(xiàn)有JavaScript/HTML UI組件簡單。

          neilk:這個框架看起來非常酷,但“built by Google”有點用詞不當,像Closure或Angular、Polymer等這些都Google內(nèi)部使用的技術,在經(jīng)過千錘百煉后才像面向公眾,因此稱作 "technologies by Googlers"更為合適。

          相關資料

          Polymer主頁: http://www.polymer-project.org/

          項目主頁上的FAQ描述比較清晰: http://www.polymer-project.org/faq.html 

          架構圖: http://www.polymer-project.org/images/architecture-diagram.svg?20130516

          GitHub: https://github.com/polymer/polymer 

          本文為CSDN編譯整理,未經(jīng)允許不得轉載,如需轉載請聯(lián)系market#csdn.net(#換成@)

          posted @ 2013-12-04 15:20 小馬歌 閱讀(439) | 評論 (0)編輯 收藏
           

          互聯(lián)網(wǎng)公司linux運維生產(chǎn)場景常用軟件工具一覽,同時補充了個別常用但不是開源的軟件。

          下午受邀請參加了一個BBS活動,于是有了下面的內(nèi)容。
          下面是在linux網(wǎng)站運維方向老男孩最近幾年常用的免費的開源軟件,臨時即興想起來的,在這里和大家分享,希望給初學者指引一點路。
          linux的世界真的很精彩,還沒入門的朋友趕緊進來吧!

          操作系統(tǒng):Centos※,Freebsd,Ubuntu,Redhatlinux,suselinux
          網(wǎng)站服務:apache※,nginx,lighttpd,php※,tomcat※,resin
          數(shù)據(jù)庫:Mysql※,PostgreSQL,Mysql-proxy,MariaDB
          代理相關:lvs,keepalived,haproxy,nginx,apache,heartbeat(此行都是※)
          網(wǎng)站緩存:squid※,nginx※,varnish
          內(nèi)存緩存:memcached※,memcachedb,TokyoTyrant※,MongoDB,Cassandra※,redis※,tair,CouchDB
          存儲相關:Nfs※,Moosefs※,Hadoop※,gfs※,lustre,FastDFS
          版本管理:cvs,svn※,git
          監(jiān)控報警:mboy,mrtg,nagios,cacti,zabbix,munin,hyperic
          域名解析:bind,powerdns,dnsmq
          同步軟件:rsync,inotify,sersync,drbd,csync2,union,lsyncd,scp(此行都是※)
          分發(fā)工具:Secboy,expect※,puppet※,cfengine※,ssh+rsync+sersync
          虛擬軟件:xen,kvm
          內(nèi)網(wǎng)軟件:iptables,zebra,iftraf,ntop,tc,iftop
          郵件軟件:qmail※,posfix※,sendmail
          遠程撥號:openvpn,pptp,openswan,ipip
          統(tǒng)一認證:ldap(可結合微軟活動目錄)
          隊列工具:ActiveMQ※,RabbitMQ,MemcacheQ
          打包發(fā)布:mvn,ants,jenkins
          測試軟件:apacheab,smokeping,siege,JMeter,Webbench,LoadRunner(此行都是
          日志相關:syslog,rsyslog,Awstats
          DB代理:mysql-proxy,amoeba(更多還是程序?qū)崿F(xiàn)讀寫分離)
          搜索軟件:Sphinx,Xapian(大公司會自己開發(fā)類似百度的小規(guī)模內(nèi)部搜索引擎)

          提示:
          1)以上所有軟件都是老男孩用過或測試過的。
          2)帶的為老男孩最近幾年用的比較多,可信任使用的。也是近年來linux運維的大眾。
          3)有了功能分類和軟件名,大家有需求,可以按功能找軟件直接G就知道了。

          4)學習要有舍有得,什么都抓必然短時間都不會精,希望大家能抓重點,抓精髓,大眾軟件(帶)先熟練了,這是基礎加提高,在研究小眾軟件(不帶),這是高手之路,最后在研究偏門的,世外高手之路,當然前提是先掌握前面的大眾和小眾。
          5)當然還有一些沒有大眾開源的有一些也很棒,如審計堡壘機程序。

          還有用的多的,老男孩落下的,大家補充啊。

          本文出自 “老男孩linux運維” 博客,請務必保留此出處http://oldboy.blog.51cto.com/2561410/775056

          posted @ 2013-11-07 16:12 小馬歌 閱讀(428) | 評論 (0)編輯 收藏
           

          Memcached資源很容易混淆,所以我打包好了.
          下載地址: http://www.euphie.net/downloads/memcached.tar.gz
          下載后解壓,里面有幾個包:
          1.memcached-1.4.15 //Memcached服務端.
          2.memcached-2.1.0 //PHP的Memcached擴展,其實Memcached擴展有兩種,還有一種叫Memcache,不過Memcached比Memcache功能更強大.
          3.libevent-2.0.21-stable //Memcached服務端的依賴包.
          4.libmemcached-1.0.16 //Memcached擴展的依賴包.

          一,安裝Libevent

          #cd libevent-2.0.21-stable #./configure -prefix=/usr/local/libevent #make #make install

          二,安裝Memcached服務端

          #cd memcached-1.4.15 #./configure -prefix=/usr/local/memcached  -with-libevent=/usr/local/libevent #make #make install

          三,啟動Memcached服務

          #/usr/local/memcached/bin/memcached -d -m 50  -u root -p 12000 -c 256 -P /tmp/memcached.pid

          注:
          -d選項是啟動一個守護進程,
          -m是分配給Memcache使用的內(nèi)存數(shù)量,單位是MB.
          -u是運行Memcache的用戶.
          -l是監(jiān)聽的服務器IP地址,我這里沒有填.
          -p是設置Memcache監(jiān)聽的端口.
          -c選項是最大運行的并發(fā)連接數(shù),默認是1024,按照你服務器的負載量來設定.
          -P是設置保存Memcache的pid文件.

          四,安裝Libmemcached

          #cd libmemcached-1.0.16 #./configure -prefix=/usr/local/libmemcached  -with-memcached=/usr/local/memcached/bin/memcached #make #make install

          注:
          如果報”./libmemcached-1.0/memcached.h:46:27: error: tr1/cinttypes: No such file or directory”錯誤,則需要升級gcc版本.

          五,安裝Memcached PHP擴展

          #cd memcached-2.1.0 找到phpize和php-config的路徑,我的分別是/usr/local/bin/phpize和/usr/bin/php-config. #/usr/local/bin/phpize #./configure --with-php-config=/usr/bin/php-config  --with-libmemcached-dir=/usr/local/libmemcached #make #make install 安裝成功后會生成memcached.so,把路徑加到php.ini的extension=xxx里.
          posted @ 2013-09-27 14:25 小馬歌 閱讀(542) | 評論 (0)編輯 收藏
           
          信號產(chǎn)生方式對進程的影響
          sigint通過ctrl+c將會對當進程發(fā)送此信號信號被當前進程樹接收到,也就是說,不僅當前進程會收到信號,它的子進程也會收到
          sigtermkill命令不加參數(shù)就是發(fā)送這個信號只有當前進程收到信號,子進程不會收到。如果當前進程被kill了,那么它的子進程的父進程將會是init,也就是pid為1的進程

          SIGQUIT
          和SIGINT類似, 但由QUIT字符(通常是Ctrl-\)來控制. 進程在因收到SIGQUIT退出時會產(chǎn)生core文件, 在這個意義上類似于一個程序錯誤信號。

          SIGSTOP
          停止(stopped)進程的執(zhí)行. 注意它和terminate以及interrupt的區(qū)別:該進程還未結束, 只是暫停執(zhí)行. 本信號不能被阻塞, 處理或忽略.

          SIGKILL
          強制殺死

          頭文件信號詳解
          /* Signals.  */
          #define SIGHUP          1       /* Hangup (POSIX).  */
          #define SIGINT          2       /* Interrupt (ANSI).  */
          #define SIGQUIT         3       /* Quit (POSIX).  */
          #define SIGILL          4       /* Illegal instruction (ANSI).  */
          #define SIGTRAP         5       /* Trace trap (POSIX).  */
          #define SIGABRT         6       /* Abort (ANSI).  */
          #define SIGIOT          6       /* IOT trap (4.2 BSD).  */
          #define SIGBUS          7       /* BUS error (4.2 BSD).  */
          #define SIGFPE          8       /* Floating-point exception (ANSI).  */
          #define SIGKILL         9       /* Kill, unblockable (POSIX).  */
          #define SIGUSR1         10      /* User-defined signal 1 (POSIX).  */
          #define SIGSEGV         11      /* Segmentation violation (ANSI).  */
          #define SIGUSR2         12      /* User-defined signal 2 (POSIX).  */
          #define SIGPIPE         13      /* Broken pipe (POSIX).  */
          #define SIGALRM         14      /* Alarm clock (POSIX).  */
          #define SIGTERM         15      /* Termination (ANSI).  */
          #define SIGSTKFLT       16      /* Stack fault.  */
          #define SIGCLD          SIGCHLD /* Same as SIGCHLD (System V).  */
          #define SIGCHLD         17      /* Child status has changed (POSIX).  */
          #define SIGCONT         18      /* Continue (POSIX).  */
          #define SIGSTOP         19      /* Stop, unblockable (POSIX).  */
          #define SIGTSTP         20      /* Keyboard stop (POSIX).  */
          #define SIGTTIN         21      /* Background read from tty (POSIX).  */
          #define SIGTTOU         22      /* Background write to tty (POSIX).  */
          #define SIGURG          23      /* Urgent condition on socket (4.2 BSD).  */
          #define SIGXCPU         24      /* CPU limit exceeded (4.2 BSD).  */
          #define SIGXFSZ         25      /* File size limit exceeded (4.2 BSD).  */
          #define SIGVTALRM       26      /* Virtual alarm clock (4.2 BSD).  */
          #define SIGPROF         27      /* Profiling alarm clock (4.2 BSD).  */
          #define SIGWINCH        28      /* Window size change (4.3 BSD, Sun).  */
          #define SIGPOLL         SIGIO   /* Pollable event occurred (System V).  */
          #define SIGIO           29      /* I/O now possible (4.2 BSD).  */
          #define SIGPWR          30      /* Power failure restart (System V).  */
          #define SIGSYS          31      /* Bad system call.  */
          #define SIGUNUSED       31
          posted @ 2013-09-26 12:39 小馬歌 閱讀(309) | 評論 (0)編輯 收藏
          僅列出標題
          共95頁: First 上一頁 22 23 24 25 26 27 28 29 30 下一頁 Last 
           
          主站蜘蛛池模板: 渝北区| 清涧县| 关岭| 阳山县| 忻城县| 新龙县| 东宁县| 长顺县| 密山市| 德昌县| 乌鲁木齐县| 遵义县| 安庆市| 从江县| 土默特左旗| 平安县| 肃南| 和顺县| 磐石市| 武强县| 金昌市| 乐山市| 吉安市| 湖口县| 柳河县| 白银市| 读书| 安宁市| 山东省| 葵青区| 湖北省| 油尖旺区| 禹城市| 外汇| 兴国县| 高陵县| 肃北| 繁昌县| 新竹市| 包头市| 菏泽市|