Python作為一種推崇“簡單、優雅、明確”的面向對象語言,以其簡捷明了的語法結構,豐富的類庫,出色的易用性在互聯網時代得到了廣泛的應用。不論是國外的Facebook、Youtube、Instagram、Pinterest,還是國內的知乎、豆瓣,用Python開發的Web應用已經無處不在。
而隨著云計算時代的到來,以及基于Python的云架構開源項目OpenStack的流行,越來越多的企業開始引入云服務的概念,嘗試利用云計算服務來構建新的高可用架構。而同樣地,企業級應用程序的設計與開發方式也發生了轉變——開發人員需要構建原生的云計算應用,以便更有效的降低運營成本并提升靈活性。利用云平臺與云服務再結合Python來進行應用開發,就成為了一種行之有效的途徑。
Python確實是個好語言,簡單易用上手快,標準庫和PyPI第三方庫有豐富而又有用的資源,可以快速的解決開發者的問題,而不用重復造輪子,這些特點使得Python這幾年逐漸流行起來。相對而言,C受限于較為低級的語法,開發周期長,一般用來開發性能要求高的軟件。Java偏重于企業開發,緩慢的JVM啟動速度導致Java不適合用來開發系統管理腳本。而Python作為一個多面手,被廣泛應用于Web開發、科學計算、數據分析、云計算(OpenStack)、運維平臺和自動化運維(SaltStack)等。
Python的優點很多,但隨著企業業務向云端和移動互聯網上的遷移,真實線上環境的復雜性,巨大的流量壓力,以及IT架構的高可用問題,都會造成Python應用的性能瓶頸。作為Pythoner的你是否常被這幾個問題所困擾:
- 1.代碼執行速度真的很快嗎?
- 2.代碼性能瓶頸出在哪里?
- 3.內存消耗大不大?
- 4.是否存在內存泄漏?
透視寶Python監控實現原理
在剛剛舉行的PyConChina 2015大會上,國內領先的應用性能管理服務商云智慧VP劉國強 (Bruce Liu)先生,為廣大Pythoner帶來《Python 應用性能管理》主題分享,和大家一同探討云智慧透視寶是如何保障Python應用在生產環境下的高性能。
針對復雜的IT架構,云智慧采用Backbone分布式監測節點監控,實現系統統一調度監控任務,所有監控點同步執行,依賴可靠的骨干網監測點執行監控任務,技術上消除網絡抖動和噪聲帶來的干擾,穩定可靠的數據可以用于評估SLA。
而部署在應用系統中的智能探針會根據應用系統的語言,自動安裝對應的探針程序,并為系統繪制應用拓撲。透視寶Python探針pythonAgent會在框架的RequestHandler添加上下文管理器(context manager),通過Smartpythonagent模塊實現上下文管理協議的__enter__() 和 __exit__() 方法控制tracer進程的起始和結束。Tracer進程通過python的sys.settrace()庫方法進行開啟和結束代碼的trace過程。
Output模塊會對tracer進程返回的代碼trace信息進程處理生成我們想要的數據。其中的tree是對代碼執行過程以方法名作為節點生成樹狀的結構,能直接通過tree來還原代碼執行時的方法調用過程。而Map則記錄tree中每個節點的執行信息,如消耗內存,執行時間等。Output模塊處理完數據后會向smartAgent的sendproxy發送數據,最后sendproxy會向透視寶服務器發送數據。 pythonAgent的tracer進程能跟蹤到‘call‘, ‘line‘, ‘return‘, ‘exception‘, ‘c_call‘, ‘c_return‘, or ‘c_exception‘事件。
依托于各種Web輕量級應用框架,Python在Web應用上得到最廣泛支持,而透視寶的SmartAgent支持主流的Django、Tornado、CherryPy、Flask、Pylons、Bottle等應用框架,保證Python代碼性能數據抓取的準確性和高效能。配合透視寶部署在服務端的其他應用服務監控,包括Apache、Nginx、Tomcat、Weblogic、MySQL、Memcache、Redis、Oracle、MongoDB、PostgreSQL等,開發和運維人員能夠第一時間發現應用系統的潛在問題,準確定位應用執行緩慢的真實原因。
如何利用透視寶監控Python應用
用戶可以訪問透視寶產品網站:http://toushibao.com/ ,申請免費試用帳號,進入應用管理,下載Smart Agent并進行安裝,安裝完成訪問“系統→插件管理”,找到Smart Agent所安裝的主機,按以下說明來安裝、配置及開啟相關代碼插件。
1、安裝Python應用發現插件
根據Web容器類型安裝應用發現插件,該插件可自動發現容器內的所有應用實例并生成應用拓撲圖。
1)如果直接使用的Python Server,可以直接跳過本步驟。
2)如果Web容器為Apache
請安裝并配置Apache類型的應用發現插件ApacheApp,配置完成后開啟插件。
3)如果Web容器是Nginx
請首先在插件的配置界面中選擇安裝Nginx類型的應用發現插件NginxApp。安裝完成之后您還需要配置Nginx插件,與Apache不同的是,此時您需要在主機上手工編譯,請參考安裝目錄中“./plugins/nginx_path/README”文檔。
2、安裝并開啟Python代碼監控插件PythonCode
選擇PythonCode插件安裝并開啟,SmartAgent將自動下載插件至安裝目錄的smart_agent/plugins下。
默認會使用系統Python進行安裝。修改PythonAgent.sh中PythonCommand值,可安裝至系統中其他Python環境。
3、重啟Web Server
安裝開啟Python代碼監控插件后,可能需要您手動重啟web Server(apachehttpdNginxPython Server等軟件)。
4、查看Python應用數據
配置完成后,大致兩分鐘后您就可以在“應用”模塊中查看數據。