積累經(jīng)驗(yàn)篇
做運(yùn)維也快4年多了,就像游戲打怪升級(jí),升級(jí)后知識(shí)體系和運(yùn)維體系也相對(duì)變化挺大,學(xué)習(xí)了很多新的知識(shí)點(diǎn)。
運(yùn)維工程師 是從一個(gè)呆逼進(jìn)化為苦逼再成長(zhǎng)為牛逼的過(guò)程,前提在于你要能忍能干能拼,還要具有敏銳的嗅覺(jué)感知前方潮流變化。如:今年大數(shù)據(jù),人工智能比較火。。。(相對(duì)表示就是 python 比較火) 前面也講了運(yùn)維基礎(chǔ)篇,發(fā)現(xiàn)對(duì)很多人收益挺大,接下來(lái)也寫(xiě)下關(guān)于這4年多的運(yùn)維實(shí)踐經(jīng)驗(yàn),從事了2年多游戲運(yùn)維,1年多安全運(yùn)維,1年大數(shù)據(jù)運(yùn)維,相關(guān)行業(yè)信息不能算非常精通嗎,但是熟悉和熟練還是相對(duì)可以的。
初級(jí)篇
詳見(jiàn): 詳解Linux運(yùn)維工程師入門(mén)級(jí)必備技能
拓?fù)湓斠?jiàn):
中級(jí)篇
從我后面面試經(jīng)歷和面試別人的經(jīng)歷。有些人認(rèn)為,其實(shí)運(yùn)維就是部署某個(gè)軟件,設(shè)置些基礎(chǔ)功能,就算會(huì)運(yùn)維了。
舉個(gè)例子:安裝LAMP,LNMP,就感覺(jué)部署方法我都掌握了。其實(shí)網(wǎng)上大多數(shù)都有一鍵安裝腳本啥的根本沒(méi)有啥技術(shù)含量,在面試官眼里,這些都不是你的亮點(diǎn)。基本到了公司一般環(huán)境架構(gòu)都是部署好的,很少需要你去變動(dòng)環(huán)境架構(gòu)。就算你安裝好 LNMP 架構(gòu)你熟悉里面的原理嗎,熟悉 Nginx 優(yōu)化嗎,熟悉 MySQL 優(yōu)化嗎?
再舉個(gè)例子:我面試遇到的問(wèn)題,面試官問(wèn)你既然熟悉 LNMP 架構(gòu),那么 Nginx 反向代理的作用。
你應(yīng)該不是說(shuō)出懂這個(gè)軟件和配置,你盡可能的說(shuō)怎么優(yōu)化,怎么深入提高網(wǎng)站性能。
1、使用反向代理可以理解為7層應(yīng)用層的負(fù)載均衡,使用負(fù)載均衡之后可以非常便捷的橫向擴(kuò)展服務(wù)器集群,實(shí)現(xiàn)集群整體并發(fā)能力、抗壓能力的提高。
2、通常反向代理服務(wù)器會(huì)帶有本地 Cache 功能,通過(guò)靜態(tài)資源的 Cache,有效的減少后端服務(wù)器所承載的壓力,從而提高性能。
下面說(shuō)說(shuō)運(yùn)維在工作中需要掌握的核心技術(shù)
注意,這是在工作中掌握的,在學(xué)習(xí)中很難掌握。
1、第一條最主要的排錯(cuò)
分析部分程序不能運(yùn)行或沒(méi)有按預(yù)想結(jié)果運(yùn)行的原因,對(duì)程序運(yùn)行跟蹤,查看系統(tǒng)調(diào)用的過(guò)程。
較深入的系統(tǒng)瓶頸點(diǎn)分析。
查看剩余內(nèi)存:
系統(tǒng)信息:
硬件信息:
使用分析系統(tǒng)分析web日志。(如逆火軟件,)
分析系統(tǒng)性能瓶頸點(diǎn)(IO/memory/cpu,常用工具,top命令中shift組合鍵的特殊用Sar/vmstat/iostat/ipcs)
日志管理常用命令:
2、優(yōu)化
優(yōu)化可以說(shuō)是運(yùn)維最吃香的技能,基本會(huì)優(yōu)化的運(yùn)維普遍工資很高,而且優(yōu)化是要承擔(dān)風(fēng)險(xiǎn)的,并不是網(wǎng)上搜個(gè)文章改一下配置文件或者參數(shù)就叫優(yōu)化了,這樣很容易造成宕機(jī)。
優(yōu)化是根據(jù)實(shí)際的現(xiàn)場(chǎng)環(huán)境硬件各個(gè)參數(shù)進(jìn)行部分優(yōu)化,提高軟件性能和網(wǎng)站性能。這個(gè)我只能講半知半解,當(dāng)時(shí)優(yōu)化mysql和tomcat參數(shù)也是根據(jù)網(wǎng)上文章和官網(wǎng)文檔查找參數(shù)在虛擬機(jī)上測(cè)試然后查看性能。
成本優(yōu)化,性能優(yōu)化。這里我給出 tomcat 優(yōu)化 jvm 參數(shù)(做過(guò)相應(yīng)測(cè)試才放到現(xiàn)場(chǎng)環(huán)境的):(記住無(wú)監(jiān)控不調(diào)優(yōu))
-標(biāo)準(zhǔn)參數(shù),所有jvm都應(yīng)該支持
-X 非標(biāo),每個(gè)jvm實(shí)現(xiàn)都不同
-XX 不穩(wěn)定參數(shù),下一版本可能會(huì)取消
serial collector 單線程 序列化
parallel collector 多線程
啟動(dòng) jvisualvm.exe 監(jiān)控 dump 內(nèi)存溢出
-Xms:初始堆大小
-Xmx:最大堆大小
-Xss:線程棧大小
-XX:NewSize=n:設(shè)置年輕代大小
-XX:NewRatio=n:設(shè)置年輕代和年老代的比值,如3, 標(biāo)示年輕代:年老代比值1:3,年輕代占整個(gè)年輕代年老代和的1/4
-XX:SurvivorRatio=n:年輕代中的eden區(qū)與2個(gè)Survivor區(qū)的比值。
-XX:MaxPermSize=n:設(shè)置持久代大小
收集器設(shè)置
-XX:+UseSerialGC:設(shè)置串行收集器
-XX:+UseParallelGC:設(shè)置并行收集器
-XX:+UseConcMarkSweepGC:設(shè)置并發(fā)收集器
回收統(tǒng)計(jì)信息
-XX:+PrintGC
-XX:+PrintGCDetails
-Xloggc:filename
tocmat 優(yōu)化 確認(rèn)有幾個(gè) jvm 虛擬機(jī)
set JAVA_OPTS=
-Xms4g
-Xmx4g
-Xss512k
-XX:+AggressiveOpts 進(jìn)攻型的優(yōu)化選項(xiàng),所有優(yōu)化項(xiàng)都加上
-XX:+UseBiasedLocking 優(yōu)化鎖,基本都要選上,偏執(zhí)鎖
-XX:permSize=64m 原始區(qū)大小,最大300m 類(lèi)多就設(shè)置大一點(diǎn)
-XX:MaxPermSize=300m
-XX:+DisableExplicitGC //System.gc() 不顯示調(diào)用gc
-XX:+UseConcMarkSweepGC 使用cms縮短相應(yīng)時(shí)間,并發(fā)收集,低停頓
-XX:+UseParNewGC 并行收集新生代的垃圾
-XX:+CMSParallelRemarkEnabled 在使用UseParNewGC的情況下,盡量減少mark的時(shí)間
-XX:+UseCMSCompactAtFullCollection 使用并發(fā)收集器時(shí),開(kāi)啟對(duì)年老代的壓縮,使碎片減少
-XX:LargePageSizelnBytes=128m 內(nèi)存分頁(yè)大小對(duì)性能的提升
-XX:+UseFastAccessorMethods get/set方法轉(zhuǎn)成本地代碼
-Djava awt headless=true 修復(fù)linux下tomcat處理圖標(biāo)時(shí)可能產(chǎn)生的bug
內(nèi)存調(diào)優(yōu):
tomcat 前任何參數(shù)沒(méi)參加大概每秒605 調(diào)優(yōu)后大概每秒435 接近3倍的結(jié)果
3、開(kāi)發(fā)技能
優(yōu)選 shell 和 python,現(xiàn)在 shell 無(wú)法滿(mǎn)足你的需求或者效率很低,那么選擇自動(dòng)化 python 是最好的選擇?,F(xiàn)在普遍招聘需求要求,會(huì)寫(xiě) shell 或者 python,perl 腳本,個(gè)人選擇還是選 python。
python 這門(mén)語(yǔ)言上手比較快,容易理解。
python 在服務(wù)器管理工具上非常豐富,配置管理(saltstack) 批量執(zhí)行( fabric, saltstack) 監(jiān)控(Zenoss, nagios 插件) 虛擬化管理( python-libvirt) 進(jìn)程管理 (supervisor) 云計(jì)算(openstack) ...... 還有大部分系統(tǒng) C 庫(kù)都有 python 綁定。
對(duì)于流程確定的事情,最終一定是納入系統(tǒng)管理的體系,寫(xiě)成程序,成為系統(tǒng)的一部分。而不是無(wú)法復(fù)用游離與整體的各種腳本。
隨著云計(jì)算時(shí)代的來(lái)臨,中小型公司,不需要運(yùn)維了。大型公司,沒(méi)有工程開(kāi)發(fā)能力的運(yùn)維,是沒(méi)有競(jìng)爭(zhēng)力的。
最重要的學(xué)好 python 可以漲工資,可以漲工資,可以漲工資 。(重要的事情說(shuō)三遍。)
目前本人也是在學(xué) python,正在把以前 shell 腳本的實(shí)例轉(zhuǎn)換成 python 腳本。
python筆記: python實(shí)例手冊(cè)(一直在看)
下載鏈接: http://down.51cto.com/data/2329173
4、意識(shí)篇
1) 安全意識(shí):
運(yùn)維人員的權(quán)限很大,所以一定要保證帳號(hào)/私鑰的安全。
最好使用加密工具存儲(chǔ)。比如truecrypt,lpassword
基于本地存儲(chǔ)。切勿用網(wǎng)盤(pán),也不建議用lastpass等
ssh私鑰添加密碼
2) 磨刀意識(shí):
關(guān)于任何操作配置,最好先搞明白操作或配置的原理,然后再去操作。應(yīng)一句話叫做“磨刀不誤砍柴功”,而且對(duì)于類(lèi)似的操作可以舉一反三。
3) 計(jì)劃意識(shí):
復(fù)雜的變更操作比如多臺(tái)主機(jī)以及牽涉到san存儲(chǔ),最好先作 操作計(jì)劃,寫(xiě)計(jì)劃文檔,詳細(xì)致每條命令,然后請(qǐng)高手幫忙審核。 這樣能最大程度使整個(gè)操作過(guò)程安全。如果是重要的客戶(hù)業(yè)務(wù)系統(tǒng),操作最好有回退方案,而一旦變更失敗,客戶(hù)可以在短時(shí)間內(nèi)將業(yè)務(wù)回退。
4) 記錄分享意識(shí):
遇到自己認(rèn)為較特殊的案例時(shí),記得要寫(xiě) 案例過(guò)程及分析的文檔。也方便自己以后翻看,或者和其他兄弟分享,作知識(shí)的傳播以便于大家以后都能少走彎路。
5) 監(jiān)控意識(shí):
運(yùn)維來(lái)說(shuō),監(jiān)控是非常重要的,監(jiān)控是發(fā)現(xiàn)系統(tǒng)各種異常的眼睛,所以運(yùn)維應(yīng)該和監(jiān)控緊密配合。
6) 業(yè)務(wù)意識(shí):
盡量了解維護(hù)的各主機(jī)上業(yè)務(wù)類(lèi)型,以及各主機(jī)業(yè)務(wù)之間的關(guān)聯(lián)性。因?yàn)槿魏尉S護(hù)工作都是為主機(jī)能提供業(yè)務(wù)服務(wù)的,當(dāng)某業(yè)務(wù)中斷,能最快的知道與此業(yè)務(wù)相關(guān)的主機(jī)群,從而縮小故障排查范圍,最快定位故障。
附上運(yùn)維思路拓?fù)鋱D:
可以看看: 安全運(yùn)維理念(半神半仙亦民工)
意識(shí)是很重要,并不是你技術(shù)很牛,學(xué)的技術(shù)很多很熟,就不代表你不需要運(yùn)維意識(shí),其實(shí)領(lǐng)導(dǎo)很看重運(yùn)維意識(shí)的,例如有沒(méi)有做好備份,權(quán)限分配問(wèn)題,平臺(tái)測(cè)試情況,故障響應(yīng)時(shí)間等,這些都是意識(shí),而不是你學(xué)了很多技術(shù)自認(rèn)大牛了,平臺(tái)發(fā)現(xiàn)故障你又沒(méi)什么大不子,以為很簡(jiǎn)單的問(wèn)題喜歡處理就處理,不需要向其它部門(mén)反饋等,領(lǐng)導(dǎo)不是看你的技術(shù)如何,而是看你的運(yùn)維意識(shí)如何,你沒(méi)運(yùn)維意識(shí),技術(shù)再牛也沒(méi)用,只會(huì)讓其它部門(mén)的人跟你不協(xié)調(diào)。
要知道做IT這行是苦B的,需要無(wú)盡的學(xué)習(xí),不學(xué)習(xí)只會(huì)被淘汰,不想被年輕的淘汰,就只能不斷增值自己,不然不是你工資無(wú)法提升,而是你無(wú)法再?gòu)氖逻@行。
這個(gè)世界,在悄悄懲罰不改變的人...