2012年即將過去,從畢業到現在一年半時間,在w公司的維護崗位上也工作了整一年。這一年時間里,像大多數運維人員一樣,每天24小時待命,也有半夜被叫起來處理問題的苦逼,但回望這一年維護工作,更多的是為能學到知識而感到欣喜。在此記錄下2012年工作、學習經歷的點滴,與大家分享。
問題終結者
先說一下這一年的工作內容,我所在的部門為公司其他部門提供底層平台 (包括服務器硬件設備、suse linux操作系統、HA及其他中間件軟件),部門自身沒有面向外界的產品,所在的小組負責維護線上服務器設備,我平常的工作以解決線上發生的操作系統相關問題為主。
平台支撐了很多上層業務,線上在用的設備數量也很龐大,由於基數大,即使問題發生的概率小,問題仍然很多。這一年處理了各種各樣問題,從ftp、ntp配置到系統crash分析,從黑客攻擊到IO性能調優,有人為誤操作造成的問題,也有kernel bug導致的問題,可謂不一而足,包羅萬象,偶爾還會遇到問題集中爆發的情況,這時一個人不得不同時應對3、4個問題。
問題不停地發生,從公司的角度看,解決問題是為了盡快恢復業務,而從個人角度來說,更多是通過處理問題的過程,提升個人技能。經過這一年問題處理,總結起來有以下收獲:
1. 學會使用Linux各種命令,了解如何完成網絡配置、啟動配置、各項服務配置等,能較熟練地使用Linux
2. 了解了進程管理和調度、內存管理等內核子系統,對Linux內核有了入門的認識,整理有以下學習總結:
3. 學會使用sar、top、iostat、vmstat等工具,識別系統資源(內存、cpu、IO)瓶頸,學會使用pidstat、strace、pstack、oprofile等工具,進行基本的程序性能分析和調優
4. 掌握了一些問題處理思路與方法,學會從操作系統的角度看待和分析程序問題,因經常被別人問問題,也常向他人提問,懂得了如何更有效地發問
看不見的牢籠
列舉完從工作中所學的東西,再談一點感悟。
由於有不少問題涉及上層業務程序 (如程序的cpu占用率高、讀寫磁盤慢等),對這些問題,業務開發的同事會和我們一同定位分析,與很多同事接觸后發現,有相當一部分開發人員對操作系統缺乏基本的了解。
“cpu占用率統計中,sys、user、io wait各列表示什么意思?”,“調用write函數之后,程序buffer中的數據是如何最終寫到磁盤的?”,“調用glibc庫的malloc函數之后,程序是否就獲取到了系統分配的物理內存?”,且不說這些問題,遇到過有5、6年編碼經驗的開發人員,尚不知道cache/buffer的作用。
"我只負責這個模塊,別的我不清楚”,相信像這種只關注自己那一小塊田地的程序員並不是特例,經常依賴他人解決問題、缺乏學習主動性、甘做螺絲釘,這無形中給自己建起一道與外界隔絕的牆,慢慢地,這些人的編碼、分析及其他方面的技能逐漸退化,並開始習慣於推諉、扯皮、講流程,三五年后,即使有想轉身的意識,但因自己僅熟悉的那塊並不能適用於其他公司、其他領域,最終會發現自己不得不依靠自己建起的牢籠生存。
為避免道路越走越窄,我們應該培養自己精專的一兩個技術方向,同時廣泛涉獵其他技術領域;學會熟練使用一兩門編程語言,當有其他語言、框架更適合完成某個項目或功能時,不因自己不熟悉這門語言而抗拒,不參與純粹的編程語言孰優孰劣的爭論;不論是架構設計、前后端開發,還是DBA、測試、運維等,做好所在崗位,同時嘗試積累其他崗位的經驗。
生命不息,折騰不止
正如上面所列,這一年我工作中用到Linux操作系統相關知識比較多,幾乎沒有涉及開發編碼。為了不讓自己編碼方面的技能退化,閑時走讀了memcached、redis、libevent的源碼,對redis、mongoDB等nosql數據庫的應用場景進行了解,編寫了一個以redis作數據庫的用於標簽管理的node.js模塊,研究了一下如何使用新浪微博開放接口完成登錄授權、微博數據抓取,使用新浪雲計算平台sae和一份開源圖站源碼,部署了自己的一個關於旅行的小圖站 (github地址點擊這里)。
一個技術人員會什么並不能體現其價值,其價值應體現在參與了什么項目,實現了什么功能,解決了什么問題,所做的事情達到什么效果,具有什么影響。在明年我期望自己在技術技能上有更多地積累、更深地沉淀,同時能利用所學知識創造更多的價值。
最后,祝大家在2013年過得更有意義、更加精彩。