Monthly Archive十月 2008
Web Server/Apache/Nginx & 技术 30 Oct 2008 05:58 pm
Nginx for Windows
kevin写的nginx for windows 支持(Windows Vista, Windows XP, Windows 2000)
他的主页:http://www.kevinworthington.com/nginx/win32/
目前有三个主流版本下载:
| Branch | Download Package | Release Date |
| Development | 0.7.19 | 13 October 2008 |
| Stable | 0.6.32 | 07 July 2008 |
| Legacy | 0.5.37 | 07 July 2008 |
tips:请不要用在生产环境,仅供开发测试。
一。下载
我这里下载0.6.32版http://www.kevinworthington.com/nginx/win32/nginx-0.6.32-win32-setup.exe
下载后安装到c:\nginx。
到PHP 官方下载php
我这里下载PHP 5.2.6 zip package
下载后以解压到c:\php。
二。配置nginx
下面这张截图内容为廖老师 nginx 配置单:

上图中用红线椭圆圈起来的,是nginx php 配置的关键部分,没配置正确会出现404错误,让我郁闷很久。
如果你的程式放在有空格的文件夹下如program files下,可以用以下方法。
include fcgi.conf;
set $rootpath “D:\Program Files\wamp\www”;
fastcgi_param SCRIPT_FILENAME $rootpath$fastcgi_script_name;
三。启动nginx
执行c:\nginx\Start-nginx.bat启动
启动php的cgi server
关于php cgi server 可以使用以下命令:
php-cgi.exe -b 127.0.0.1:9000 -q
这样做,缺陷是命令行窗口一直打开,若关闭那cgi server 也关闭啦。到网上下载RunHiddenConsole.exe 可以使命令行窗口隐藏啦。
RunHiddenConsole.exe php-cgi.exe -b 127.0.0.1:9000 -q
你也可以写一个批处理来做这件事:
start_phpcgi.bat
@ECHO OFF
ECHO Starting PHP FastCGI…
RunHiddenConsole.exe c:/php/php-cgi.exe -b 127.0.0.1:9000 -q
EXIT
关闭的批处理
stop_phpcgi.bat
@ECHO OFF
ECHO Stopping PHP FastCGI…
bin\process.exe -k php-cgi.exe >nul
ECHO.
EXIT
最后写一个简单PHPINFO来验证PHP 是否工作正常。
参考:http://blog.chinaitlab.com/html/30/104830-166195.html
其它 & 文档理论 28 Oct 2008 04:12 pm
[转载]程式設計師的格言
via Tsung’s Blog
从 Tsung’s Blog 上看到这篇东西,发现里面的一些格言实在太经典、太贴切了!我觉得这个应该是和技术相关的,贴在这里,估计有共鸣的人应该很多。:)
先摘录几个经典的(做了小幅修改,替换了一些繁体术语):
要殺一個程式設計師不需要刀,改三次需求就好
程式是運氣與直覺堆砌而成的奇蹟。
若不具備這兩者,不可能以這樣的工期實現這樣的需求。
修改需求是對奇蹟吐槽的亵渎行為。
而追加修改則是相信奇蹟還會重現的無謀行動。
追加需求確定後交貨期限就無法確定,
交貨期限確定後追加需求就無法確定。
這稱為「追加需求與交貨期限的測不準原理」。
原文出处:程式設計師的格言 « but, or bug
——————————————————————————
程式設計師的格言(盜作不少)
譯自
* プログラマーの格言(盗作多し)
* http://mixi.jp/view_community.pl?id=1772737
(版本2 2008/10/12更新)
譯註
* SE是日本軟體公司裡程式設計師的頭子。自己不太寫程式,主要工作是跟客戶確認規格。
* 程式設計師多半自己不面對客戶。
* 跟PM又不一樣。(有什麼比較貼切的職稱翻譯嗎?)
1. 每天有24小時。
所謂的「今天之內」,是指到明天早上為止。
2. 程式不會照自己所想的跑。只會照所寫的跑。
3. 需求規格在程式寫完後才會敲定。
基本規格要客戶看到成品後才會決定。
詳細規格要使用者用過後才會確定。
4. 我對軟體設計的方式導出的結論,有兩種方式。
一是把軟體設計得單純到很明顯不會有缺陷,
不然就是把軟體設計得複雜到沒有明顯的缺陷。
- C.A.R.Hoare
5. 程式碼不要在開發現場寫! 去客戶那寫!
除錯不要在期限前做! 上線後再做!
6. 畫面是藍色的!
(國際太空站太空人重新安裝 Windows NT,日誌中的名句)
7. 先說「沒辦法」的人贏。
8. 有意見的話你寫
9. 要殺一個程式設計師不需要刀,改三次規格就好
10. 首先要先懷疑別人,被懷疑的人或許會把問題解決掉。
(註:通常會「先懷疑自己」)
11. 開發沒有終點。只有釋出(release)。
12. 無論規格多晚才能確定,結案期限永遠不會變。
這是所謂的「期限守恆定理」。
13. 客戶總是覺得水跟追加需求是不用錢的。
14. 付錢愈計較的客人愈囉唆。
15. 在排定開發行程時,總是視而不見一些連小學生都會的算數。
業務部門總是一堆不知道1+1=2的人。
16. 一個人掛了大家都掛了。
17. bug過了一晚可能就變成規格了。
18. 好的規格找一個天才不如找三個凡人。
爛的規格找一百個凡人不如找一個天才。
19. 客製軟體中30%的價格用在確認規格上。
30%用在修改規格上。
30%用在找bug。
結果初期規格反映在價格上占的比例只有10%。
20. 對客戶來說SE是部下,程式設計師是家畜。
對SE來說客人是錢,對程式設計師來說顧客是看不見的病毒。
除了弄完程式以外,沒有其他驅除的辦法。
21. 顧客想受SE喜歡,要自己了解到系統開發需要時間與金錢,早點確定規格。
SE想受顧客喜歡,則要讓程式設計師討厭自己。
22. 很多SE跟程式設計師都暗自想著有錢有閒的話什麼系統都想自己動手做,
不過都沒這種機會。
23. 品質的劣化程度依規格改變的次數與規模而定。
24. 業務是認為空想能夠實現的夢想家。
SE則是深信任何障礙都能突破的冒險家。
程式設計師則是被夢想家和冒險家拋到漆黑海裡的漂流者。
25. 有才能的程式設計師第一次看到設計細節時,要先理解程式的目的。
接下來要設法讓SE了解到以指定的方法、工時並無法完成這個工作。
26. 程式是運氣與直覺堆砌而成的奇蹟。
若不具備這兩者,不可能以這樣的工時實現這樣的規格。
修改規格是對奇蹟吐槽的褻瀆行為。
而追加修改則是相信奇蹟還會重現的無謀行動。
27. 程式設計師聽了「把自己當作顧客去著想!」而開始思考。
啊,像夢一樣。
28. 對於因為興趣而寫程式的人來說,所謂的技術是程式語言能力。
對於因為工作而寫程式的人來說,所謂的技術是邏輯思考能力與人際溝通能力。
程式語言可以看著手冊溝通,客戶不行。
29. 程式系統在交貨之前會不斷縮小。
先用元件定義取悅老闆。
再拿經費概算要部長妥協現實的方案。
在運用會議中,課長會嘗識減少自己責任範圍。
在細節會議中,負責人會把範圍縮到自己記得的部分。
30. SE需要持久力,程式設計師需要爆發力。
31. 準時離開公司,工作會變多。
32. 完美的程式需要完美的時間與金錢。
聽說揮霍著美國的國家預算的NASA,也覺得時間跟錢不夠。
33. 詳細設計要在程式碼的註解裡做完。
註解是唯一的自衛手段,至少要讓自己看懂。
34. 還有時間看程式碼的話就執行他。
CPU跑得比腦細胞快。至少這時候可以休息。
35. 程式的異常該稱為「bug」還是「規格上的限制」是看期限還剩多久決定的。
36. 所謂便服日,好像社會上把他叫做假日
(註) 日本有些公司會有所謂便服日(不用穿西裝的日子),通常是星期五,但…
37. 地獄持續一段時間後,充滿殺氣的怒吼會變多。
再持續一段時間,說話會變少但牢騷會變多,壟罩在凝重的氣氛裡。
再持續下去,反而會海闊天空,四周洋溢充滿活力的聲音。
這種狀態稱為「Programmer’s High」,也是倒下來的人開始出現的時候。
38. 遠處的火災一定燒到這裡。
39. 禱告,然後 “工作” 吧。(修道院的標語)
40. 程式不是用腦記的,要用身體記住。
41. 明天能放假的話死了也罷。
42. 外面有下雨耶,昨天開始下的嗎?
43. 心若不廢掉(消極),身體會廢掉。
若不讓自己殘忍,自己會被殺。
44. 客戶會說謊,業務會作夢,SE會做白日夢。
程式設計師則惦惦。(愈來愈自言自語)
45. SE總是不講理的(unreasonable)說「沒有辦不到(impossible)」,
業務總是沒辦法(impossible)說「沒道理(unreasonable)」。
46. 規格書就像航海圖,客戶則是洋流。洋流陰晴不定,航海圖就變垃圾。
程式設計師必須在沒有航海圖的海上憑自己的力量找到大陸。
47. 再嘮嘮叨叨下去也是要付錢的。
48. 多想個10秒鐘,你可以不說「嗯,這個做得到」。
49. 人是無法從別人失敗記取教訓的動物。
砍成本、改規格、加需求、趕上線,從來沒有人從眾多失敗中記取教訓。
50. 老手用來提振精神的魔法格言:
「不過比起以前來說算是…」
新人用來提起幹勁的魔法格言:
「把這件工作做完的話…」他們還不知道工作是沒有終點的。
51. 所謂交案期限,是指開發現場從公司換到客戶那裡的日子。
52. 程式、SE、經理不是職種。是職責。
53. 業務是最難搞的客戶。
54. 能夠迅速想到解法的程式設計師太多了。
他們能用一分鐘想到方法,用一天去寫程式。
不需要花一小時想到解法,再用一小時去寫程式。
- Jon Bentley
55. 漂亮的規格,可以從沒有bug出現看出來。
明明爛的就是設計,為什麼是這樣…
56. 上線後的除錯才叫做bug。
57. 追加需求確定後交貨期限就無法確定,
交貨期限確定後追加需求就無法確定。
這稱為「追加需求與交貨期限的測不準原理」。
58. 除三個錯就會冒出一個錯。
這稱為bug的無窮迴圈。
59. 不祥的預感總會實現。
不過程式設計師不會去煩惱不祥的預感,那是SE的工作。
60. 要解決地獄的辦法,就是客戶把錢交出來。
61. 不懂電腦的操作者是發現bug的天才。而且無法重現。
62. 每次開會就更改規格的客戶,
他的操作手冊要等到操作寫好的程式後才能寫出來。
63. 搞不懂的時候,Currency(長整數)比Interger(整數)好用。
Variant(字串、數字都能存的萬能變數)又比Currency(長整數)好用。
安全第一。
(VB程式設計師如是說)
64. 啊,那是微軟的規格。
65. 程式設計師所不滿的規格也一定會讓客戶不滿。
(這是說程式設計師覺得難寫的地方常常是SE溝通有落差)
66. 程式設計師需要的技能,
包括交涉、時程管理、業務分析、提案、設計、程式語言、架構、維護、使用。
SE需要的技能則減掉程式語言、架構、維護與使用。
專案經理需要的能力則再減掉業務分析、提案與設計。
業務需要的能力再扣掉時程管理。
67. 正因為健康,才能做不健康的事。
68. (這個不是 bug 嗎?)
規、規格、是規格啦。不過有一點跟規格不太一樣啦。
69. 那是你說的規格。
70. 開發室沒有窗戶,那是因為以前…
71. 即使爛了也是規格。
72. SE: 真沒辦法。
PG: 也沒註解。
(碰到不知道是誰寫的程式,大家都束手無策的狀態)
73. 為什麼你不能兩三下解決掉他啦。
因為之前兩三下搞定的東西也被你兩三下就否定了。
74. 不會動的bug就只是普通的bug。(會動的bug則能視為規格)
75. 今天好好清理bug,bug應該死光了吧。
咦?Windows也死了唷。
76. 客戶不會去想最壞的情況。要他面對最壞的情況,他會認為是漫天開價。
SE則會顧慮最壞的情況,準備應付最壞的情況。
程式設計師比誰都早預料到最壞的情況,而無視最壞的情況。
77. 唯一不產生bug的方法,就是不寫程式。
第二好的方法,就是在時程跟人員確定之後的每次改規格,都重新檢視過整個專案。
78. 共同責任是程式設計師的責任。
管理職?那是啥?好吃嗎?我沒吃過耶。
79. 如果可以改行的話,想找個準時下班不叫「逃跑」的工作。
80. 對職業程式設計師來說,漂亮的程式是單純而自然的邏輯、簡單而基本的指令、豐富的註解,
也就是新手程式設計師也能馬上動手改的程式。
而要寫出這樣的程式,需要單純、簡單、美麗的規格。
但可惜客人總是喜歡搞很複雜。
81. 設計者應該是不該要求製作者製作出超過設計以上內容的吧…
82. 無論是做的比規格書裡的多,還是只照規格書裡的寫,SE都會找程式設計師的碴。
所以程式設計師只做規格書裡的寫的內容。
83. SE對程式設計師說的「常識」每三小時變一次。
84. 自己看規格書。不能跑的是規格。
85. 「沒辦法」是要看把一天當多少小時來算。
一天常常指的是3人日,一個月常常是指4.5人月喔。
86. 工時要減掉一半的單體測試與一半的系統測試,
而交貨期則要另外加上上線後的兩個月。
87. 能拿到錢的規格變更稱為「受理項目」,
拿不到錢的規格變更則稱為「SE的規格確認失誤」。
程式設計師是這麼看的。
88. 累了。我想睡了。可以回家嗎。
(累了吧,我也累了。好累喔怎麼了。反正就是規格啦,管他的)
89. 試圖降低成本的話,為了配合預算,品質會下降,不過漫天開價做出來的品質也不見得好到哪裡去。
90. REDO到底該怎麼唸一直搞不懂。是利斗嗎、李度嗎、R E D O嗎,難道是 red 零 嗎? 拜託加上注音吧。
(譯註:我比較煩惱 Linux)
91. 有人在程式碼註解裡寫日記。像「今天是雨天…」,「想回家…」之類的。甚至還有「修改日: 2003/10/10 不能同意你更多」這種註解出現。說到這個,好像也看過「吃大便」這樣的註解。
92. 小學生時第一次看到電腦
國中時第一次學會怎麼用
高中與大學學會程式語言
出社會後才發現自己走錯路
93. 「不要讓老闆當業務比較好」
94. 說來說去,要去研究根本不知道為什麼會動的東西為什麼不會動了,找拿破崙來也沒搞頭。
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的程式直接上線還要可怕的了。
15.
* 『程式設計師』=能將SE條理不通的說明翻譯成程式碼的高手
* 『SE』=與客戶討論改寫規格書、與程式設計師討論後再改寫規格書,程式出貨後還要繼續改寫規格書的人
* 『PM』=每天修改自己定下的行程表的人
* 『業界老鳥』=臉色蒼白缺乏表情的人
* 『外包』=幫不會寫程式的正職員工寫程式的人
* 『coding』=複製貼上的工作
* 『單體測試』=指開始寫程式
* 『除錯』=把程式碼註解掉的工作
* 『新同事』=在火燒屁股的專案火上加油的人
* 『出貨日』=把只完成一半的系統上線的日子
* 『末班電車』=業界平均的下班時間
* 『颱風假』=一年一度可以準時下班的業界假日
16. 當誰寫的程式碼跑出bug時,那個人大概都不在了(墨菲定理?)
17. 最終手段
「重開機」
意外的常常都很有效
18. 最強藉口
以前「那是硬體的極限」
現在「那是Windows的規格」
19. 「程式碼的可信度,不會比寫的人還可信。」
linux 维护优化 & 技术 27 Oct 2008 05:56 pm
使用vnstat监控流量
vnstat通/proc来监控流量,无需root权限,提供每日、每月等报表,并有php前台扩展。
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
|
linux 维护优化 & 技术 27 Oct 2008 05:28 pm
使用iftop实时监控网卡流量
iftop是类似于top的实时流量监控工具,无报表功能,需使用root运行。
官方网站:http://www.ex-parrot.com/~pdw/iftop/
目前最新版本为: iftop-0.17pre3.tar.gz
安装需要:
libpcap
http://www.tcpdump.org/
安装libpcap时出错
gcc -O2 -I. -DHAVE_CONFIG_H -D_U_=”__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 <linux/types.h>
加入到
/usr/include/linux/if_packet.h
libcurses
界面:
界面说明:
第一行为带宽,这里为1Mbit,不是字节哦.
连接列表,最后三个分别是2秒,10秒和40秒的平均流量
=>代表发送,<= 代表接收
最后三行表示发送,接收和全部的流量,第二列为你运行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 <pdw@ex-parrot.com> and contributors
安装
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
<= 160b 518b 485b
192.168.54.96 => 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
Web Server/Apache/Nginx & 技术 27 Oct 2008 11:53 am
使用nginx负载均衡lucene
server a是之前退役的,现存放着一些小些php站点和lucene 搜索,
server a
cpu: Xeon(TM) CPU 2.80GHz (双核*2)
mem:1G*2
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:1G*2
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同步索引文件。
一。先设置两台服务器时间是同步的。
二。设置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 rsync@221.0.0.1:/lucene/index / >> /opt/shell/rsync_index.log
vi rsync_cache.sh
#!/bin/bash
#获取职位的cache和关键词
/usr/bin/rsync -avlR –delete -e /usr/bin/ssh rsync@221.0.0.1:/lucene/keyword / >> /opt/shell/rsync_keyword.log
/usr/bin/rsync -avlR –delete -e /usr/bin/ssh rsync@221.0.0.1:/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,还可以接受。
Web Server/Apache/Nginx & 技术 22 Oct 2008 06:28 pm
设置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/tomcatCATALINA_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
Web Server/Apache/Nginx & 技术 22 Oct 2008 09:23 am
优化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
linux 维护优化 & 技术 17 Oct 2008 11:51 am
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 (brewbuilder@ls20-bc1-14.build.redhat.com) (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
LINUX & 技术 17 Oct 2008 11:49 am
新上8G的web服务器
硬件
dell1950
5405(四核)*2 (EM64T)
4G*2
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小时将备份的数据移到了新机器。
做迁移一定要多做准备!
LINUX & 技术 17 Oct 2008 11:08 am
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 |