Skip to content


[转载]程式設計師的格言

via Tsung’s Blog

Tsung’s Blog 上看到这篇东西,发现里面的一些格言实在太经典、太贴切了!我觉得这个应该是和技术相关的,贴在这里,估计有共鸣的人应该很多。:)

先摘录几个经典的(做了小幅修改,替换了一些繁体术语):

要殺一個程式設計師不需要刀,改三次需求就好

程式是運氣與直覺堆砌而成的奇蹟。 若不具備這兩者,不可能以這樣的工期實現這樣的需求。 修改需求是對奇蹟吐槽的亵渎行為。 而追加修改則是相信奇蹟還會重現的無謀行動。

追加需求確定後交貨期限就無法確定, 交貨期限確定後追加需求就無法確定。 這稱為「追加需求與交貨期限的測不準原理」。

原文出处:程式設計師的格言 « but, or bug ——————————————————————————

程式設計師的格言(盜作不少)

譯自

(版本2 2008/10/12更新)

譯註

  • SE是日本軟體公司裡程式設計師的頭子。自己不太寫程式,主要工作是跟客戶確認規格。
  • 程式設計師多半自己不面對客戶。
  • 跟PM又不一樣。(有什麼比較貼切的職稱翻譯嗎?)
  1. 每天有24小時。 所謂的「今天之內」,是指到明天早上為止。
  2. 程式不會照自己所想的跑。只會照所寫的跑。
  3. 需求規格在程式寫完後才會敲定。 基本規格要客戶看到成品後才會決定。 詳細規格要使用者用過後才會確定。
  4. 我對軟體設計的方式導出的結論,有兩種方式。 一是把軟體設計得單純到很明顯不會有缺陷, 不然就是把軟體設計得複雜到沒有明顯的缺陷。
  • C.A.R.Hoare
  1. 程式碼不要在開發現場寫! 去客戶那寫! 除錯不要在期限前做! 上線後再做!
  2. 畫面是藍色的! (國際太空站太空人重新安裝 Windows NT,日誌中的名句)
  3. 先說「沒辦法」的人贏。
  4. 有意見的話你寫
  5. 要殺一個程式設計師不需要刀,改三次規格就好
  6. 首先要先懷疑別人,被懷疑的人或許會把問題解決掉。 (註:通常會「先懷疑自己」)
  7. 開發沒有終點。只有釋出(release)。
  8. 無論規格多晚才能確定,結案期限永遠不會變。 這是所謂的「期限守恆定理」。
  9. 客戶總是覺得水跟追加需求是不用錢的。
  10. 付錢愈計較的客人愈囉唆。
  11. 在排定開發行程時,總是視而不見一些連小學生都會的算數。 業務部門總是一堆不知道1+1=2的人。
  12. 一個人掛了大家都掛了。
  13. bug過了一晚可能就變成規格了。
  14. 好的規格找一個天才不如找三個凡人。 爛的規格找一百個凡人不如找一個天才。
  15. 客製軟體中30%的價格用在確認規格上。 30%用在修改規格上。 30%用在找bug。 結果初期規格反映在價格上占的比例只有10%。
  16. 對客戶來說SE是部下,程式設計師是家畜。 對SE來說客人是錢,對程式設計師來說顧客是看不見的病毒。 除了弄完程式以外,沒有其他驅除的辦法。
  17. 顧客想受SE喜歡,要自己了解到系統開發需要時間與金錢,早點確定規格。 SE想受顧客喜歡,則要讓程式設計師討厭自己。
  18. 很多SE跟程式設計師都暗自想著有錢有閒的話什麼系統都想自己動手做, 不過都沒這種機會。
  19. 品質的劣化程度依規格改變的次數與規模而定。
  20. 業務是認為空想能夠實現的夢想家。 SE則是深信任何障礙都能突破的冒險家。 程式設計師則是被夢想家和冒險家拋到漆黑海裡的漂流者。
  21. 有才能的程式設計師第一次看到設計細節時,要先理解程式的目的。 接下來要設法讓SE了解到以指定的方法、工時並無法完成這個工作。
  22. 程式是運氣與直覺堆砌而成的奇蹟。 若不具備這兩者,不可能以這樣的工時實現這樣的規格。 修改規格是對奇蹟吐槽的褻瀆行為。 而追加修改則是相信奇蹟還會重現的無謀行動。
  23. 程式設計師聽了「把自己當作顧客去著想!」而開始思考。 啊,像夢一樣。
  24. 對於因為興趣而寫程式的人來說,所謂的技術是程式語言能力。 對於因為工作而寫程式的人來說,所謂的技術是邏輯思考能力與人際溝通能力。 程式語言可以看著手冊溝通,客戶不行。
  25. 程式系統在交貨之前會不斷縮小。 先用元件定義取悅老闆。 再拿經費概算要部長妥協現實的方案。 在運用會議中,課長會嘗識減少自己責任範圍。 在細節會議中,負責人會把範圍縮到自己記得的部分。
  26. SE需要持久力,程式設計師需要爆發力。
  27. 準時離開公司,工作會變多。
  28. 完美的程式需要完美的時間與金錢。 聽說揮霍著美國的國家預算的NASA,也覺得時間跟錢不夠。
  29. 詳細設計要在程式碼的註解裡做完。 註解是唯一的自衛手段,至少要讓自己看懂。
  30. 還有時間看程式碼的話就執行他。 CPU跑得比腦細胞快。至少這時候可以休息。
  31. 程式的異常該稱為「bug」還是「規格上的限制」是看期限還剩多久決定的。
  32. 所謂便服日,好像社會上把他叫做假日 (註) 日本有些公司會有所謂便服日(不用穿西裝的日子),通常是星期五,但…
  33. 地獄持續一段時間後,充滿殺氣的怒吼會變多。 再持續一段時間,說話會變少但牢騷會變多,壟罩在凝重的氣氛裡。 再持續下去,反而會海闊天空,四周洋溢充滿活力的聲音。 這種狀態稱為「Programmer’s High」,也是倒下來的人開始出現的時候。
  34. 遠處的火災一定燒到這裡。
  35. 禱告,然後 “工作” 吧。(修道院的標語)
  36. 程式不是用腦記的,要用身體記住。
  37. 明天能放假的話死了也罷。
  38. 外面有下雨耶,昨天開始下的嗎?
  39. 心若不廢掉(消極),身體會廢掉。 若不讓自己殘忍,自己會被殺。
  40. 客戶會說謊,業務會作夢,SE會做白日夢。 程式設計師則惦惦。(愈來愈自言自語)
  41. SE總是不講理的(unreasonable)說「沒有辦不到(impossible)」, 業務總是沒辦法(impossible)說「沒道理(unreasonable)」。
  42. 規格書就像航海圖,客戶則是洋流。洋流陰晴不定,航海圖就變垃圾。 程式設計師必須在沒有航海圖的海上憑自己的力量找到大陸。
  43. 再嘮嘮叨叨下去也是要付錢的。
  44. 多想個10秒鐘,你可以不說「嗯,這個做得到」。
  45. 人是無法從別人失敗記取教訓的動物。 砍成本、改規格、加需求、趕上線,從來沒有人從眾多失敗中記取教訓。
  46. 老手用來提振精神的魔法格言: 「不過比起以前來說算是…」 新人用來提起幹勁的魔法格言: 「把這件工作做完的話…」他們還不知道工作是沒有終點的。
  47. 所謂交案期限,是指開發現場從公司換到客戶那裡的日子。
  48. 程式、SE、經理不是職種。是職責。
  49. 業務是最難搞的客戶。
  50. 能夠迅速想到解法的程式設計師太多了。 他們能用一分鐘想到方法,用一天去寫程式。 不需要花一小時想到解法,再用一小時去寫程式。
  • Jon Bentley
  1. 漂亮的規格,可以從沒有bug出現看出來。 明明爛的就是設計,為什麼是這樣…
  2. 上線後的除錯才叫做bug。
  3. 追加需求確定後交貨期限就無法確定, 交貨期限確定後追加需求就無法確定。 這稱為「追加需求與交貨期限的測不準原理」。
  4. 除三個錯就會冒出一個錯。 這稱為bug的無窮迴圈。
  5. 不祥的預感總會實現。 不過程式設計師不會去煩惱不祥的預感,那是SE的工作。
  6. 要解決地獄的辦法,就是客戶把錢交出來。
  7. 不懂電腦的操作者是發現bug的天才。而且無法重現。
  8. 每次開會就更改規格的客戶, 他的操作手冊要等到操作寫好的程式後才能寫出來。
  9. 搞不懂的時候,Currency(長整數)比Interger(整數)好用。 Variant(字串、數字都能存的萬能變數)又比Currency(長整數)好用。 安全第一。 (VB程式設計師如是說)
  10. 啊,那是微軟的規格。
  11. 程式設計師所不滿的規格也一定會讓客戶不滿。 (這是說程式設計師覺得難寫的地方常常是SE溝通有落差)
  12. 程式設計師需要的技能, 包括交涉、時程管理、業務分析、提案、設計、程式語言、架構、維護、使用。 SE需要的技能則減掉程式語言、架構、維護與使用。 專案經理需要的能力則再減掉業務分析、提案與設計。 業務需要的能力再扣掉時程管理。
  13. 正因為健康,才能做不健康的事。
  14. (這個不是 bug 嗎?) 規、規格、是規格啦。不過有一點跟規格不太一樣啦。
  15. 那是你說的規格。
  16. 開發室沒有窗戶,那是因為以前…
  17. 即使爛了也是規格。
  18. SE: 真沒辦法。 PG: 也沒註解。 (碰到不知道是誰寫的程式,大家都束手無策的狀態)
  19. 為什麼你不能兩三下解決掉他啦。 因為之前兩三下搞定的東西也被你兩三下就否定了。
  20. 不會動的bug就只是普通的bug。(會動的bug則能視為規格)
  21. 今天好好清理bug,bug應該死光了吧。 咦?Windows也死了唷。
  22. 客戶不會去想最壞的情況。要他面對最壞的情況,他會認為是漫天開價。 SE則會顧慮最壞的情況,準備應付最壞的情況。 程式設計師比誰都早預料到最壞的情況,而無視最壞的情況。
  23. 唯一不產生bug的方法,就是不寫程式。 第二好的方法,就是在時程跟人員確定之後的每次改規格,都重新檢視過整個專案。
  24. 共同責任是程式設計師的責任。 管理職?那是啥?好吃嗎?我沒吃過耶。
  25. 如果可以改行的話,想找個準時下班不叫「逃跑」的工作。
  26. 對職業程式設計師來說,漂亮的程式是單純而自然的邏輯、簡單而基本的指令、豐富的註解, 也就是新手程式設計師也能馬上動手改的程式。 而要寫出這樣的程式,需要單純、簡單、美麗的規格。 但可惜客人總是喜歡搞很複雜。
  27. 設計者應該是不該要求製作者製作出超過設計以上內容的吧…
  28. 無論是做的比規格書裡的多,還是只照規格書裡的寫,SE都會找程式設計師的碴。 所以程式設計師只做規格書裡的寫的內容。
  29. SE對程式設計師說的「常識」每三小時變一次。
  30. 自己看規格書。不能跑的是規格。
  31. 「沒辦法」是要看把一天當多少小時來算。 一天常常指的是3人日,一個月常常是指4.5人月喔。
  32. 工時要減掉一半的單體測試與一半的系統測試, 而交貨期則要另外加上上線後的兩個月。
  33. 能拿到錢的規格變更稱為「受理項目」, 拿不到錢的規格變更則稱為「SE的規格確認失誤」。 程式設計師是這麼看的。
  34. 累了。我想睡了。可以回家嗎。 (累了吧,我也累了。好累喔怎麼了。反正就是規格啦,管他的)
  35. 試圖降低成本的話,為了配合預算,品質會下降,不過漫天開價做出來的品質也不見得好到哪裡去。
  36. REDO到底該怎麼唸一直搞不懂。是利斗嗎、李度嗎、R E D O嗎,難道是 red 零 嗎? 拜託加上注音吧。 (譯註:我比較煩惱 Linux)
  37. 有人在程式碼註解裡寫日記。像「今天是雨天…」,「想回家…」之類的。甚至還有「修改日: 2003/10/10 不能同意你更多」這種註解出現。說到這個,好像也看過「吃大便」這樣的註解。
  38. 小學生時第一次看到電腦 國中時第一次學會怎麼用 高中與大學學會程式語言 出社會後才發現自己走錯路
  39. 「不要讓老闆當業務比較好」
  40. 說來說去,要去研究根本不知道為什麼會動的東西為什麼不會動了,找拿破崙來也沒搞頭。

ex 系列

  1. 就算程式裡沒bug,編譯器會有bug。 就算編譯器沒bug,OS會有bug。 就算一切都沒bug,客戶會決定什麼是bug。
  2. 規格與規格書是不同的東西。
  3. 比期限更重要的是靈感與睡眠。
  4. 比知識與經驗重要的是手冊與時間。
  5. 能動就好了,能動的話…
  6. 過了三天就是別人寫的程式碼。
  7. (大搜查線系列) 規格變動不是在會議室裡發生的!是在現場發生的!
  8. (大搜查線系列) 異常不是在模擬測試時發生的!是上線後才會發生的!
  9. 漂亮的設計三天或許就膩了 骯髒的設計三天就習慣了
  10. bug與規格是一體兩面
  11. 電腦裡沒有bug,bug常在人心。
  12. 無論怎麼檢查,不管怎麼確認,上線前一晚就是睡不著。(RFC968)
  13. 估價需要1%的經驗與99%的直覺
  14. 沒有什麼事情比直接讓找不到任何bug的程式直接上線還要可怕的了。
  • 『程式設計師』=能將SE條理不通的說明翻譯成程式碼的高手
  • 『SE』=與客戶討論改寫規格書、與程式設計師討論後再改寫規格書,程式出貨後還要繼續改寫規格書的人
  • 『PM』=每天修改自己定下的行程表的人
  • 『業界老鳥』=臉色蒼白缺乏表情的人
  • 『外包』=幫不會寫程式的正職員工寫程式的人
  • 『coding』=複製貼上的工作
  • 『單體測試』=指開始寫程式
  • 『除錯』=把程式碼註解掉的工作
  • 『新同事』=在火燒屁股的專案火上加油的人
  • 『出貨日』=把只完成一半的系統上線的日子
  • 『末班電車』=業界平均的下班時間
  • 『颱風假』=一年一度可以準時下班的業界假日
  1. 當誰寫的程式碼跑出bug時,那個人大概都不在了(墨菲定理?)
  2. 最終手段 「重開機」 意外的常常都很有效
  3. 最強藉口 以前「那是硬體的極限」 現在「那是Windows的規格」
  4. 「程式碼的可信度,不會比寫的人還可信。」

Posted in 其它, 文档理论.

Tagged with .


使用vnstat监控流量

vnstat通/proc来监控流量,无需root权限,提供每日、每月等报表,并有php前台扩展。

经过几个月运行发现有时vnstat -d 只能看最近几天的 http://humdi.net/vnstat/

wget http://humdi.net/vnstat/vnstat-1.6.tar.gz tar zxvf vnstat-1.6.tar.gz cd vnstat-1.6 make && make install ; vnstat –testkernel && vnstat -u -i eth0

如果用户在一个64位平台上编译,应改用make 64bit命令.

添加crontab crontab -e 0-55/5 if [ -x /usr/bin/vnstat ] && [ ls/var/lib/vnstat/ | wc -l -ge 1 ]; then /usr/bin/vnstat -u; fi

 vnStat 1.6 by Teemu Toivola

     -q,  --query        query database
     -h,  --hours        show hours
     -d,  --days         show days
     -m,  --months       show months
     -w,  --weeks        show weeks
     -t,  --top10        show top10
     -s,  --short        use short output
     -u,  --update       update database
     -i,  --iface        change interface (default: eth0)
     -?,  --help         short help
     -v,  --version      show version
     -tr, --traffic      calculate traffic
     -l,  --live         show transfer rate in real time

See also "--longhelp" for complete options list and "man vnstat".
$ vnstat
Database updated: Sun Dec  2 22:20:01 2007

    inet (eth0)

       received:     735.00 GB (48.9%)
    transmitted:     769.38 GB (51.1%)
          total:       1.47 TB

                    rx     |     tx     |  total
    -----------------------+------------+-----------
    yesterday     23.35 MB |   20.25 MB |   43.60 MB
        today     27.47 MB |   21.37 MB |   48.84 MB
    -----------------------+------------+-----------
    estimated        29 MB |      22 MB |      51 MB
(with 2 interfaces)
$ vnstat

                     rx      /     tx      /    total    /  estimated
 Internet (eth1):
     yesterday    209.36 MB  /  322.88 MB  /  532.24 MB
         today      1.99 GB  /    2.46 GB  /    4.46 GB  /    4.67 GB

 Local (eth0):
     yesterday    248.27 MB  /    4.63 GB  /    4.87 GB
         today      2.31 GB  /    4.21 GB  /    6.52 GB  /    6.83 GB
$ vnstat -h
 inet (eth0)                                                              22:15
  ^                                                                 r
  |                                                                 rt r
  |                                                                 rt rt
  |                                                                 rt rt
  |                                                              r  rt rt
  |     rt                                                       r  rt rt
  |     rt                                                 rt    rt rt rt
  |  rt rt rt                                  r  r  rt r  rt r  rt rt rt
  |  rt rt rt                               r  rt rt rt rt rt rt rt rt rt
  |  rt rt rt rt r              r     r  r  r  rt rt rt rt rt rt rt rt rt rt
 -+--------------------------------------------------------------------------->
  |  23 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22    

 h   rx (kB)    tx (kB)      h   rx (kB)    tx (kB)      h   rx (kB)    tx (kB)
23      1,352      1,219    07        277        151    15      1,352      1,165
00      2,281      2,140    08        402        158    16      1,487        878
01      1,485      1,261    09        290        155    17      1,752      1,559
02        648        522    10        589        185    18      1,455      1,001
03        392        261    11        650        202    19      2,332      1,835
04        323        240    12        907        350    20      3,881      3,619
05        311        179    13      1,234      1,044    21      3,695      3,237
06        281        173    14      1,221        812    22        675        591
$ vnstat -d

 inet (eth0)  /  daily

    day         rx      |     tx      |  total
------------------------+-------------+----------------------------------------
   03.11.     26.57 MB  |   27.39 MB  |   53.97 MB   %%%%%%:::::::
   04.11.     22.23 MB  |   16.71 MB  |   38.94 MB   %%%%%::::
   05.11.     31.38 MB  |   23.35 MB  |   54.74 MB   %%%%%%%::::::
   06.11.     35.17 MB  |   26.85 MB  |   62.02 MB   %%%%%%%%%::::::
   07.11.     42.65 MB  |   34.19 MB  |   76.84 MB   %%%%%%%%%%%::::::::
   08.11.     36.65 MB  |   26.75 MB  |   63.40 MB   %%%%%%%%%::::::
   09.11.     35.01 MB  |   27.45 MB  |   62.47 MB   %%%%%%%%:::::::
   10.11.     24.48 MB  |   22.72 MB  |   47.20 MB   %%%%%%:::::
   11.11.     26.04 MB  |   19.91 MB  |   45.95 MB   %%%%%%:::::
   12.11.     27.89 MB  |   18.73 MB  |   46.61 MB   %%%%%%%::::
   13.11.     33.82 MB  |   24.52 MB  |   58.35 MB   %%%%%%%%::::::
   14.11.     39.11 MB  |   31.76 MB  |   70.86 MB   %%%%%%%%%::::::::
   15.11.     41.57 MB  |   36.23 MB  |   77.80 MB   %%%%%%%%%%:::::::::
   16.11.     36.93 MB  |   33.51 MB  |   70.44 MB   %%%%%%%%%::::::::
   17.11.     25.79 MB  |   23.87 MB  |   49.66 MB   %%%%%%::::::
   18.11.     29.51 MB  |   22.50 MB  |   52.01 MB   %%%%%%%::::::
   19.11.     43.46 MB  |   32.91 MB  |   76.38 MB   %%%%%%%%%%%::::::::
   20.11.     51.90 MB  |   47.82 MB  |   99.72 MB   %%%%%%%%%%%%%::::::::::::
   21.11.     38.77 MB  |   34.21 MB  |   72.98 MB   %%%%%%%%%%::::::::
   22.11.     34.54 MB  |   31.22 MB  |   65.76 MB   %%%%%%%%::::::::
   23.11.     22.61 MB  |   21.16 MB  |   43.76 MB   %%%%%:::::
   24.11.     22.49 MB  |   20.84 MB  |   43.34 MB   %%%%%:::::
   25.11.     31.60 MB  |   26.50 MB  |   58.10 MB   %%%%%%%%::::::
   26.11.     38.23 MB  |   33.84 MB  |   72.07 MB   %%%%%%%%%%::::::::
   27.11.     43.54 MB  |   41.88 MB  |   85.42 MB   %%%%%%%%%%%::::::::::
   28.11.     38.86 MB  |   30.87 MB  |   69.73 MB   %%%%%%%%%::::::::
   29.11.     40.16 MB  |   33.64 MB  |   73.79 MB   %%%%%%%%%%::::::::
   30.11.     32.73 MB  |   28.67 MB  |   61.40 MB   %%%%%%%%:::::::
   01.12.     23.35 MB  |   20.25 MB  |   43.60 MB   %%%%%:::::
   02.12.     27.27 MB  |   21.21 MB  |   48.47 MB   %%%%%%%:::::
------------------------+-------------+----------------------------------------
 estimated       29 MB  |      22 MB  |      51 MB
$ vnstat -m

 inet (eth0)  /  monthly

   month         rx      |      tx      |   total
-------------------------+--------------+--------------------------------------
  Jan '07       1.33 GB  |     1.25 GB  |     2.58 GB   %%%%%%%%%::::::::
  Feb '07       1.31 GB  |     1.51 GB  |     2.82 GB   %%%%%%%%%::::::::::
  Mar '07       1.54 GB  |     1.66 GB  |     3.20 GB   %%%%%%%%%%%:::::::::::
  Apr '07       1.27 GB  |     1.13 GB  |     2.40 GB   %%%%%%%%::::::::
  May '07       1.17 GB  |     1.31 GB  |     2.48 GB   %%%%%%%%:::::::::
  Jun '07     920.61 MB  |     2.00 GB  |     2.90 GB   %%%%%%:::::::::::::
  Jul '07     917.21 MB  |   763.12 MB  |     1.64 GB   %%%%%%:::::
  Aug '07     915.59 MB  |   905.99 MB  |     1.78 GB   %%%%%%::::::
  Sep '07     926.10 MB  |   678.70 MB  |     1.57 GB   %%%%%%::::
  Oct '07       1.00 GB  |   714.00 MB  |     1.69 GB   %%%%%%:::::
  Nov '07       0.99 GB  |   842.16 MB  |     1.81 GB   %%%%%%%:::::
  Dec '07      50.62 MB  |    41.46 MB  |    92.07 MB
-------------------------+--------------+--------------------------------------
estimated        808 MB  |      663 MB  |     1.44 GB
$ vnstat -t

 inet (eth0)  /  top 10

   #       day         rx      |     tx      |  total
-------------------------------+-------------+---------------------------------
   1    26.03.06      6.41 GB  |   10.83 GB  |   17.24 GB   %%%%%%%:::::::::::
   2    05.02.04      8.31 GB  |    7.08 GB  |   15.39 GB   %%%%%%%%%:::::::
   3    04.02.05      7.96 GB  |    6.21 GB  |   14.17 GB   %%%%%%%%::::::
   4    04.09.05      8.09 GB  |    5.22 GB  |   13.30 GB   %%%%%%%%:::::
   5    04.11.03      4.52 GB  |    5.96 GB  |   10.47 GB   %%%%::::::
   6    26.06.05      4.12 GB  |    6.10 GB  |   10.22 GB   %%%%::::::
   7    02.11.03      7.18 GB  |    2.79 GB  |    9.97 GB   %%%%%%%:::
   8    31.01.05      3.68 GB  |    5.99 GB  |    9.66 GB   %%%%::::::
   9    28.08.03      5.93 GB  |    3.69 GB  |    9.62 GB   %%%%%%::::
  10    23.12.03      4.36 GB  |    5.23 GB  |    9.59 GB   %%%%%:::::
-------------------------------+-------------+---------------------------------
$ vnstat -w

    Local (eth0)  /  weekly

                        rx      |       tx      |    total
    ----------------------------+---------------+--------------
      last 7 days      4.83 GB  |     18.82 GB  |     23.65 GB
        last week      2.52 GB  |     14.58 GB  |     17.10 GB
     current week      2.31 GB  |      4.24 GB  |      6.55 GB
    ----------------------------+---------------+--------------
        estimated     17.66 GB  |     32.36 GB  |     50.02 GB
$ vnstat -tr
10386 packets sampled in 5 seconds
Traffic average for eth1

      rx         112.21 kB/s            620 packets/s
      tx        1444.77 kB/s           1456 packets/s
$ vnstat -l
Monitoring eth0...    (press CTRL-C to stop)

   rx:     430.68 kB/s   291 p/s            tx:      10.21 kB/s   147 p/s

 eth0  /  traffic statistics

                             rx       |       tx
--------------------------------------+----------------------------------------
  bytes                     32.79 MB  |        957 kB
--------------------------------------+----------------------------------------
          max            656.39 kB/s  |    90.50 kB/s
      average            419.78 kB/s  |    11.97 kB/s
          min            288.37 kB/s  |     7.03 kB/s
--------------------------------------+----------------------------------------
  packets                      23298  |         12348
--------------------------------------+----------------------------------------
          max                732 p/s  |       609 p/s
      average                291 p/s  |       154 p/s
          min                195 p/s  |       100 p/s
--------------------------------------+----------------------------------------
  time                  1.33 minutes

Posted in linux 维护优化, 技术.

Tagged with , .


使用iftop实时监控网卡流量

iftop是类似于top的实时流量监控工具,无报表功能,需使用root运行。

官方网站http://www.ex-parrot.com/~pdw/iftop/ 目前最新版本为: iftop-0.17pre3.tar.gz 安装需要: libpcap和libcurses
用yum或手动编译 yum install libpcap-devel

安装libpcap时出错 http://www.tcpdump.org/ gcc -O2 -I.  -DHAVE_CONFIG_H  -DU=”attribute((unused))” -c ./fad-getad.c In file included from ./fad-getad.c:64: /usr/include/linux/if_packet.h:52: 错误:expected specifier-qualifier-list before ‘__u32’ make : *** [ fad-getad.o ] 错误 1

将 #include 加入到 /usr/include/linux/if_packet.h
make,make install,通过!

iftop界面: v0.12 screenshot 

iftop界面说明: 第一行为带宽,这里为1Mbit,不是字节哦. 连接列表,最后三个分别是2秒,10秒和40秒的平均流量 =>代表发送,<= 代表接收 最后三行表示发送,接收和全部的流量,第二列为你运行iftop到目前流量,第三列为高峰值,第四列为平均值。

iftop命令说明: iftop: display bandwidth usage on an interface by host   Synopsis: iftop -h | [-npbBP] [-i interface] [-f filter code] [-N net/mask]      -h                  display this message    -n                  don’t do hostname lookups(不进行dns解析)    -N                  don’t convert port numbers to services (直接显示端口号,不显示服务名称)    -p                  run in promiscuous mode (show traffic between other                        hosts on the same network segment)(嗅探器)    -b                  don’t display a bar graph of traffic    -B                  Display bandwidth in bytes (以字节统计)    -i interface        listen on named interface    -f filter code      use filter code to select packets to count                        (default: none, but only IP packets are counted)    -F net/mask         show traffic flows in/out of network    -P                  show ports as well as hosts(按照端口对应ip地址)    -m limit            sets the upper limit for the bandwidth scale    -c config file      specifies an alternative configuration file   iftop, version 0.17pre3 copyright (c) 2002 Paul Warren <[email protected]> and contributors

iftop安装 wget http://www.ex-parrot.com/~pdw/iftop/download/iftop-0.17pre3.tar.gz tar zxvf iftop-0.17pre3.tar.gz cd iftop-0.17pre3 ./configure make make install iftop

========================================================

              12.5Kb        25.0Kb        37.5Kb        50.0Kb  62.5Kb mqqqqqqqqqqqqqvqqqqqqqqqqqqqvqqqqqqqqqqqqqvqqqqqqqqqqqqqvqqqqqqqqqqqqq 192.168.54.96         => 192.168.54.83         1.00Kb  1.86Kb  2.42Kb                       202.96.209.5             0b      0b     95b                       <=                          0b      0b    168b                               qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq TX:             cumm:  3.77KB   peak: rates:Kb 1.00Kb  1.86Kb  2.51Kb RX:                     980B            1.31Kb  160b    518b    653b TOTAL:                 4.73KB           7.10Kb 1.16Kb  2.36Kb  3.15Kb

Posted in linux 维护优化, 技术.

Tagged with , .


使用nginx负载均衡lucene

server a是之前退役的,现存放着一些小些php站点和lucene 搜索, server a cpu: Xeon(TM) CPU 2.80GHz (双核2) mem:1G2 disk:scsi 74G *2 (raid 0) os:as4 app:nginx+php+fcgi+xcache+mysql+tomcat+postfix

server b为刚退役,没有站点。 server b cpu: Xeon(TM) CPU 2.80GHz (双核2) mem:1G2 disk: sata 80G *1 (7200) os:as4 app:nginx+tomcat


server a 的搜索每天有几十万PV,平均load 5,更新索引达30,高峰时tomcat会挂掉。 产品结构:nginx代理tomcat,jsp提供搜索结果,jsp+mysql记录搜索关键字,crontab定时生成索引。

方案一:server a 提供生成索引和mysql服务,server b 提供纯web搜索服务,用rsync同步索引文件。 方案二:server a 提供生成索引和mysql服务,server b 和server a使用负载均衡一起提供需web搜索服务,用rsync同步索引文件。

一。先设置两台服务器时间是同步的。

Linux的时间设置与同步 (NTP)

二。设置rsync时不需要登录。 用server b 去拉server a的索引 使用crontab+ssh每天自动完全备份mysql数据

三。写更新的bash和设置crontab rsync在第一次是全部同步,以后就是只更新有异动的文件。 目前索引为1G左右, cache使用三级目录分布小文件,占4G

在server b上 vi rsync_index.sh #!/bin/bash #获取lucene索引 /usr/bin/rsync -avlR –delete -e /usr/bin/ssh [email protected]:/lucene/index / >> /opt/shell/rsync_index.log

vi rsync_cache.sh #!/bin/bash #获取职位的cache和关键词 /usr/bin/rsync -avlR –delete -e /usr/bin/ssh [email protected]:/lucene/keyword / >> /opt/shell/rsync_keyword.log /usr/bin/rsync -avlR –delete -e /usr/bin/ssh [email protected]:/lucene/cache / >> /opt/shell/rsync_cache.log

crontab每小时更新一次。 50 /bin/sh /opt/shell/rsync_cache.sh > /dev/null 2>&1 52 /bin/sh /opt/shell/rsync_index.sh > /dev/null 2>&1

四。设置nginx 设置nginx的配置文件,使用方案一

      location / {            proxy_pass http://127.0.0.1:8080;        location ~* ^.+.(jpg|jpeg|gif|png|css|js)$ {     root /opt/tomcat/webapps/search;     access_log   off;     expires 3d;     break;        }       }           

重启nginx,将域名指向server b. server b平均load 为5,当rsync更新时load 会达到20,还是不可靠,使用方案二。

     upstream mysvr {  #ip_hash; (据说可以以C类IP将用户固定在某台server,开启后并发大降不能肯定是否有bug)  server 127.0.0.1:8080;  server 221.0.0.1:8080;      }

server {       …..

      location / {            #proxy_pass http://127.0.0.1:8080;     proxy_pass http://mysvr;        location ~* ^.+.(jpg|jpeg|gif|png|css|js)$ {     root /opt/tomcat/webapps/search;     access_log   off;     expires 3d;     break;        }       }           

      …….

}

重启nginx,将域名指向server b. server b 和server 平均load 为1~2,更新会到5,还可以接受。

Posted in Nginx, Tomcat.

Tagged with , , , .


设置tomcat用jsvc启动

 

根据tomcat官方的document说明,linux下设置开机自启动可以使用jsvc(tomcat包里自带)
设置tomcat以独立的用户运行(防止以root运行,权限太大)

shell>sudo useradd -d /opt/tomcat -s /usr/sbin/nologin tomcat
上边的这个命令是添加一个系统用户tomcat,并且设置为不可登录系统。
设置用户tomcat 对tomcat6的访问权限

shell>sudo chown -R tomcat:website /opt/tomcat
安装jsvc,前提需要系统安装了gcc(系统一般默认安装),autoconf,libc6-dev

解压jsvc.tar.g
shell>cd /opt/tomcat/bin
shell>sudo tar zxvf jsvc.tar.gz
准备编译配置文件
shell>cd jsvc-src
shell>sudo sh support/buildconf.sh
如果成功,命令终端会打出:
support/buildconf.sh: configure script generated successfully
为configure添加执行权限
shell>sudo chmod 755 configure
编译
shell>sudo ./configure –with-java=/usr/java/jdk1.6.0_10(java的安装路径)
shell>sudo make
如果没有出现错误,jsvc就安装成功了。
设置启动脚本
修改/opt/tomcat/bin/jsvc-src/native/Tomcat5.sh 文件
# Adapt the following lines to your configuration JAVA_HOME=/usr/java/jdk1.6.0_10 CATALINA_HOME=/opt/tomcat DAEMON_HOME=/opt/tomcat/bin TOMCAT_USER=tomcat # for multi instances adapt those lines. TMP_DIR=/var/tmp PID_FILE=/var/run/jsvc.pid CATALINA_BASE=/opt/tomcat CATALINA_OPTS=”” CLASSPATH=\ $JAVA_HOME/lib/tools.jar:\ $CATALINA_HOME/bin/commons-daemon.jar:\ $CATALINA_HOME/bin/bootstrap.jar case “$1” in   start)     #     # Start Tomcat     #     $DAEMON_HOME/jsvc-src/jsvc \     -user $TOMCAT_USER \     -home $JAVA_HOME \     -Dcatalina.home=$CATALINA_HOME \     -Dcatalina.base=$CATALINA_BASE \     -Djava.io.tmpdir=$TMP_DIR \     -wait 10 \     -pidfile $PID_FILE \     -outfile $CATALINA_HOME/logs/catalina.out \     -errfile ‘&1’ \     $CATALINA_OPTS \     -cp $CLASSPATH \     org.apache.catalina.startup.Bootstrap     #     # To get a verbose JVM     #-verbose \     # To get a debug of jsvc.     #-debug \     exit $?     ;;   stop)     #     # Stop Tomcat     #     $DAEMON_HOME/jsvc-src/jsvc \     -stop \     -pidfile $PID_FILE \     org.apache.catalina.startup.Bootstrap     exit $?     ;;   *)     echo “Usage tomcat.sh start/stop”     exit 1;; esac 拷贝jsvc带的tomcat5.sh 脚本拷贝到 /etc/init.d/ 下,并改名为tomcat shell>sudo cp /opt/tomcat/bin/jsvc-src/native/Tomcat5.sh /etc/init.d/tomcat  
设置 /etc/init.d/tomcat的可执行权限

Shell>sudo chmod 755 /etc/init.d/tomcat
在/etc/rc2.d/下设置一个/etc/init.d/tomcat 的软链接

shell>cd /etc/rc2.d/
shell>sudo ln -s /etc/init.d/tomcat S16tomcat

/etc/init.d/tomcat start 

ps aux|grep java
可以看到2个进程,一个是root,一个是tomcat 

 

 参考

http://wiki.ubuntu.org.cn/Tomcat6

Posted in Tomcat, 技术.

Tagged with .


优化tomcat 内存

编辑tomcatpath/bin/catalina.sh

在最前面加上下面两行

CATALINA_OPTS=’-Xms800m -Xmx1000m’ JAVA_OPTS=’-Xms800m -Xmx1000m’

表示初始化内存为800MB,可以使用的最大内存为1000MB

另外需要考虑的是Java提供的垃圾回收机制。虚拟机的堆大小决定了虚拟机花费在收集垃圾上的时间和频度。收集垃圾可以接受的速度与应用有关,应该通过分析实际的垃圾收集的时间和频率来调整。如果堆的大小很大,那么完全垃圾收集就会很慢,但是频度会降低。如果你把堆的大小和内存的需要一致,完全收集就很快,但是会更加频繁。调整堆大小的的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求。在基准测试的时候,为保证最好的性能,要把堆的大小设大,保证垃圾收集不在整个基准测试的过程中出现。

  如果系统花费很多的时间收集垃圾,请减小堆大小。一次完全的垃圾收集应该不超过 3-5 秒。如果垃圾收集成为瓶颈,那么需要指定代的大小,检查垃圾收集的详细输出,研究 垃圾收集参数对性能的影响。一般说来,你应该使用物理内存的 80% 作为堆大小。当增加处理器时,记得增加内存,因为分配可以并行进行,而垃圾收集不是并行的。

参考: http://vod.sjtu.edu.cn/help/Article_Show.asp?ArticleID=1387&ArticlePage=1

Posted in Tomcat, 技术.

Tagged with , .


Linux下查看版本号的命令

[root@localhost ~]# uname -a Linux localhost.localdomain 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:14 EST 2007 x86_64 x86_64 x86_64 GNU/Linux [root@localhost ~]# cat /proc/version Linux version 2.6.18-8.el5 ([email protected]) (gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)) #1 SMP Fri Jan 26 14:15:14 EST 2007

[root@localhost ~]# lsb_release -a LSB Version:    :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarch Distributor ID: RedHatEnterpriseServer Description:    Red Hat Enterprise Linux Server release 5 (Tikanga) Release:        5 Codename:       Tikanga [root@localhost ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 5 (Tikanga)

[root@localhost ~]# rpm -q redhat-release redhat-release-5Server-5.0.0.9

[root@localhost ~]# cat /etc/issue Red Hat Enterprise Linux Server release 5 (Tikanga) Kernel \r on an \m

参考:http://www.51testing.com/?89868/action_viewspace_itemid_11978.html

Posted in Linux 命令, 技术.

Tagged with .


新上8G的web服务器

硬件 dell1950 5405(四核)2 (EM64T) 4G2 SAS 15K 146*2 (raid1)

软件 rhel5(64bit) nginx 0.6.32 mysql5.1.26rc php5.2.6 fcgi xcache1.2.2

nginx 状态 Active connections: 5325 server accepts handled requests  2897229 2897229 12880032 Reading: 15 Writing: 26 Waiting: 5284

系统top top – 11:36:32 up 15:02,  1 user,  load average: 0.09, 0.14, 0.16 Tasks: 188 total,   2 running, 186 sleeping,   0 stopped,   0 zombie Cpu(s):  1.9%us,  0.7%sy,  0.0%ni, 97.0%id,  0.2%wa,  0.0%hi,  0.1%si, Mem:   8174384k total,  5894848k used,  2279536k free,   305804k buffe Swap:  8191992k total,        0k used,  8191992k free,  4748588k cache

应用 大量静态页(php 404 动态生成)

  在做迁移时原系统出现坏道导致tar打包失败,load飚到五百多, 让机房重启后ssh也不能上,只能硬上新服务器。 手忙脚乱了3小时将备份的数据移到了新机器。 做迁移一定要多做准备!

Posted in LINUX, 技术.

Tagged with .


CentOS 常见问答集FAQ

CentOS 常见问答集 FAQ

1, CentOS 是什么? CentOS 是众多 Linux 发行版中的一种。全称: The Community ENTerprise Operating System 。 她是将 Red Hat Enterprise Linux (此后简称 RHEL ) 的源代码再编译,并去除 RHEL 中 Red Hat 公司商标,以及去除 RHEL 中商业组件的 Linux 发行版之一。她的目标是在不违反著作权、商标权等法律的前提下,完全兼容 RHEL 。 2, CentOS 怎样发音? CentOS 官方推荐的发音是 [sent ou is](森特-欧-爱斯)。 3, 和其他 Linux 发行版比起来 ,CentOS 更适合作为桌面系统吗? CentOS并不是为桌面系统而设计。
  • 红帽企业 Linux AS — 适用于高端的,用于关键业务处理的系统 <–CentOS 的对应版本
  • 红帽企业 Linux ES — 适用于小到中型服务器
  • 红帽企业 Linux WS — 适用于技术/设计工作站
  • 红帽企业 Desktop — 适用于安全,可管理的客户机环境
4  CentOS 5 已经发布了!是否要立刻升级到 CentOS 5 ? 随着 CentOS 5 (于2007年4月12日)的发布,好多正在将各种各样的系统运行在 CentOS 4 下的朋友是不是都已经迫不及待了呢?其实,虽然 CentOS 5 已经(于2007年4月12日)发布了,但 CentOS 4 的生命力还远远没有终结。CentOS 官方对 CentOS 4 (安全更新)的支持,将持续到 2012年2月29日!所以,正在使用 CentOS 4 做服务器的朋友,完全不必担心你的系统会显得很旧 — 到2012年的这几年里,足够我们考虑怎样让当前运行的系统适应新的 CentOS 5 环境,并逐步在 CentOS 4 (安全更新)支持期限内,在保证系统的稳定运作的前提下转移到新环境 — 这总比匆匆忙忙转移到新环境而遇到一大堆由于环境不同而导致的不兼容问题要强得多。 5 在哪里可以找到一些 CentOS 的文档? CentOS 官方文档: http://www.centos.org/docs/  (官方一般性的配置文档) Red Hat 官方文档: https://www.redhat.com/docs/ (由于 CentOS 与 RHEL 的兼容,参照 RHEL 的配置文档同样能够得到相应的解决方案) 6 CentOS 各版本及各版本所搭载的软件有哪些不同? 从 CentOS 2 开始的各版本及各版本所搭载软件的不同如下:
CentOS 2 CentOS 3.8 CentOS 4.4 CentOS 5.0
内   核 2.4.9 2.4.21 2.6.9 2.6.18
GCC 2.96 3.2.3 3.4.6 4.1.1
Web 服务器 apache 1.3.27 httpd 2.0.46 httpd 2.0.52 httpd 2.2.3
PHP 4.1.2 4.3.2 4.3.9 5.1.6
MySQL 3.23.58 3.23.58 4.1.20 5.0.22
PostgreSQL 7.1.3 7.3.15 7.4.13 8.1.4
Python 1.5.2 2.2.3 2.3.4 2.4.3
Perl 5.6.1 5.8.0 5.8.5 5.8.8
Samba 2.2.7 3.0.9 3.0.10 3.0.23c
Sendmail 8.11.6 8.12.11 8.13.1 8.13.8
Postfix X 2.0.16 2.2.10 2.3.3
OpenSSH 3.1p1 3.6.1p2 3.9p1 4.3p2
OpenSSL 0.9.6b 0.9.7a 0.9.7a 0.9.8b
iptables 1.2.5 1.2.8 1.2.11 1.3.5
Bind 9.2.1 9.2.4 9.2.4 9.3.3

Posted in LINUX, 技术.

Tagged with , .


[转][笑话] 为什么水木社区坏了一个礼拜都没有修好?

发信人: Linxs (没有宽恕就没有未来), 信区: NewExpress 标  题: Re: 比较怀疑水木挂站是非技术原因 发信站: 水木社区(临时站) (Fri Apr  4 00:32:08 2008, 站内 事实是这样的 一天上帝在机房吃煎饼油条,结果滴了油在机箱边缘上 本来油是不导电的,应该没事,所以上帝没当回事 那滴油沿着机箱边缘渗到里头, 进入电源盒子,滴在了风扇的轴的端处 本来油滴在轴承上,是件好事情, 但是,上帝滴的那滴是带有食品颗粒的食用油 过了短时间,渐渐发霉,变酸,变粘 唐山的机房通风很好,沙尘也经常进来,慢慢的黏在了轴承上 再有就是静电产生的一些絮状物,也黏在了轴承上 这个现象在我们普通的机箱也是经常见到的 其实,机箱里脏兮兮的,灰尘和赃物也没什么的 但是,偏偏那天上帝吃的太油,滴的不是一滴,而是两滴油在机箱上! 第一滴油进入了电源盒子里,那第二滴油呢? 第二滴沿着近似路线也渗到了机箱里,但是没有落在电影盒子里的风扇轴承上, 是被风扇吹着斜落在到了主板接硬盘上的某个线上, 渐渐的发霉,发酸。。。。 如果上帝只是在机房里吃一次煎饼油条,那么事情也许就不会落到今天的地步。 但是,互联网的墨菲定律,最担心的事情一定会发生。 我们最担心上帝在机房吃煎饼油条,那么上帝一定会在机房吃肩膀油条。 在后来的2次进入机房的机会,上帝又在机房吃煎饼油条,一共3次, 总共落下了大小5片煎饼油条的碎屑。 机房是不养宠物的。 有了上帝留下的这些零食,蚂蚁不知道从哪里钻出来了。 很快蚂蚁就搬光了地上的碎屑,走了。 看起来事情也许到此为止了,但是真正的故事才刚刚开始。。。 落在队伍最后面的那只蚂蚁,因为体弱跟不上大部队,在后面慢慢吞吞的走啊。 造化赋予人一个短处,必然同时赋予人一个长处。对于蚂蚁也是一样的。 这只落在队伍最后面的小蚂蚁,虽然体弱,但是嗅觉灵敏。 它闻到了来自机箱上方的发酸的油滴气味,便转上沿着机箱缝隙爬了进去 离它最近的是那滴掉在硬盘线上的油滴, 小蚂蚁奋勇地向这滴上帝之油爬去 历经千辛,走迷宫似的绕过主板上的电路,来到了硬盘线上的酸油面前。 不幸的事情发生了。。。。 这天是2008年1月29日,也就是上证A股指数大跌8%的1月28日的第二天早上9点整 很多受伤的人都在这个时间段打开电脑/电视,准备开始炒股。 民用电量的短时间上升,导致了部分地区电力线的电压的快速下降, 来自水木上某个网友在职公司开发的某个供电系统的自动控制系统开始动作, 往包括唐山机房所在的地区的电网新增加一个供电电源 如果这个自动控制系统做的很精细,新增电源的的瞬间电压骤变控制的好, 灾难就不会发生。 但是,项目管理里有个定律,眼睛看不到的细节最容易出问题。 理所当然的,瞬间电压的骤变发生了。 机房里,运载着水木社区的电源风扇受这个电压骤变影响,微微的抖了一下。 轴承的瞬间加速度的变化,导致了那团围绕在上帝之油上的灰尘与絮状物的结合体 受了震动,本来摇摇欲坠的它,落了下去,掉在电源盒子的底部, 很快被风扇的风吹到一个螺丝孔边,落了下去,进入了机箱的内部空间。 砸到了那只正在用触角品尝硬盘线上的第二滴上帝之酸油的蚂蚁身上, 一下子把蚂蚁砸昏了,蚂蚁和灰尘絮状物结合体接着往下掉, 在经过CPU风扇前,被向内吹的CPU风扇吸引,斜着往主板下下方飞去 最终蚂蚁靠着触角上黏黏的发酸食用油, 黏在了CPU下方北桥芯片上的名为GPIO16的管脚上, 而后脚悬空靠近主板上的一根地线,摇摇晃晃。 这根名为GPIO16的管脚被主板BIOS重定义为低电平RESET 北桥芯片! 最后,机箱里的紊流开始发挥作用! 每隔一段时间,蚂蚁的后脚被微微的紊流一吹便碰到那根地线,直接RESET系统! 如果水木不是用raiseFS,或许就不会有这么严重的问题。 如果raise的老婆不出轨,raise就不会杀妻,就不会受控,raiseFS就会更稳定。 如果raiseFS更稳定,就不会那么容易崩溃导致水木死掉。 但是,这个世界上没有那么多如果。 事实就是raise的老婆出轨,raise杀妻,raiseFS有bug。 在多次无规则随机的重启之后,水木的FS系统终于崩溃了! 这就是水木社区硬盘崩溃的非技术原因! 但是,从中,我们更多的看到,是人,某些人造成了这次灾难! 他们,包括 – 违反规定在机房吃煎饼油条的KCN, – 大量滥用地沟油的煎饼油条老板, – 那只贪吃的蚂蚁, – 造成2008年1月28日上证指数大跌的主力资金操盘手 – 设计电力自动控制系统的某水木网友, – 水木服务器的系统BIOS设计人员, – 勾引raise老婆的第三者 – 不贞洁的raise老婆 – 因冲动杀人的raise同学 – 制造紊流的西方上帝 是他们,有意无意的共同参与了2008年4月1日水木社区崩溃灾难的这场阴谋。

Posted in 未分类.

Tagged with .