前方高能!如何保障Python應(yīng)用的高性能

2015-09-17 17:05:41來源:威易網(wǎng)作者:

Python作為一種推崇“簡單、優(yōu)雅、明確”的面向?qū)ο笳Z言,以其簡捷明了的語法結(jié)構(gòu),豐富的類庫,出色的易用性在互聯(lián)網(wǎng)時(shí)代得到了廣泛的應(yīng)用。不論是國外的Facebook、Youtube、Instagram、Pinterest……

Python作為一種推崇“簡單、優(yōu)雅、明確”的面向?qū)ο笳Z言,以其簡捷明了的語法結(jié)構(gòu),豐富的類庫,出色的易用性在互聯(lián)網(wǎng)時(shí)代得到了廣泛的應(yīng)用。不論是國外的Facebook、Youtube、Instagram、Pinterest,還是國內(nèi)的知乎、豆瓣,用Python開發(fā)的Web應(yīng)用已經(jīng)無處不在。

\

而隨著云計(jì)算時(shí)代的到來,以及基于Python的云架構(gòu)開源項(xiàng)目OpenStack的流行,越來越多的企業(yè)開始引入云服務(wù)的概念,嘗試?yán)迷朴?jì)算服務(wù)來構(gòu)建新的高可用架構(gòu)。而同樣地,企業(yè)級應(yīng)用程序的設(shè)計(jì)與開發(fā)方式也發(fā)生了轉(zhuǎn)變——開發(fā)人員需要構(gòu)建原生的云計(jì)算應(yīng)用,以便更有效的降低運(yùn)營成本并提升靈活性。利用云平臺與云服務(wù)再結(jié)合Python來進(jìn)行應(yīng)用開發(fā),就成為了一種行之有效的途徑。

Python確實(shí)是個(gè)好語言,簡單易用上手快,標(biāo)準(zhǔn)庫和PyPI第三方庫有豐富而又有用的資源,可以快速的解決開發(fā)者的問題,而不用重復(fù)造輪子,這些特點(diǎn)使得Python這幾年逐漸流行起來。相對而言,C受限于較為低級的語法,開發(fā)周期長,一般用來開發(fā)性能要求高的軟件。Java偏重于企業(yè)開發(fā),緩慢的JVM啟動速度導(dǎo)致Java不適合用來開發(fā)系統(tǒng)管理腳本。而Python作為一個(gè)多面手,被廣泛應(yīng)用于Web開發(fā)、科學(xué)計(jì)算、數(shù)據(jù)分析、云計(jì)算(OpenStack)、運(yùn)維平臺和自動化運(yùn)維(SaltStack)等。

Python的優(yōu)點(diǎn)很多,但隨著企業(yè)業(yè)務(wù)向云端和移動互聯(lián)網(wǎng)上的遷移,真實(shí)線上環(huán)境的復(fù)雜性,巨大的流量壓力,以及IT架構(gòu)的高可用問題,都會造成Python應(yīng)用的性能瓶頸。作為Pythoner的你是否常被這幾個(gè)問題所困擾:

  • 1.代碼執(zhí)行速度真的很快嗎?
  • 2.代碼性能瓶頸出在哪里?
  • 3.內(nèi)存消耗大不大?
  • 4.是否存在內(nèi)存泄漏?

透視寶Python監(jiān)控實(shí)現(xiàn)原理

在剛剛舉行的PyConChina 2015大會上,國內(nèi)領(lǐng)先的應(yīng)用性能管理服務(wù)商云智慧VP劉國強(qiáng) (Bruce Liu)先生,為廣大Pythoner帶來《Python 應(yīng)用性能管理》主題分享,和大家一同探討云智慧透視寶是如何保障Python應(yīng)用在生產(chǎn)環(huán)境下的高性能。

\

針對復(fù)雜的IT架構(gòu),云智慧采用Backbone分布式監(jiān)測節(jié)點(diǎn)監(jiān)控,實(shí)現(xiàn)系統(tǒng)統(tǒng)一調(diào)度監(jiān)控任務(wù),所有監(jiān)控點(diǎn)同步執(zhí)行,依賴可靠的骨干網(wǎng)監(jiān)測點(diǎn)執(zhí)行監(jiān)控任務(wù),技術(shù)上消除網(wǎng)絡(luò)抖動和噪聲帶來的干擾,穩(wěn)定可靠的數(shù)據(jù)可以用于評估SLA。

\

而部署在應(yīng)用系統(tǒng)中的智能探針會根據(jù)應(yīng)用系統(tǒng)的語言,自動安裝對應(yīng)的探針程序,并為系統(tǒng)繪制應(yīng)用拓?fù)。透視寶Python探針pythonAgent會在框架的RequestHandler添加上下文管理器(context manager),通過Smartpythonagent模塊實(shí)現(xiàn)上下文管理協(xié)議的__enter__() 和 __exit__() 方法控制tracer進(jìn)程的起始和結(jié)束。Tracer進(jìn)程通過python的sys.settrace()庫方法進(jìn)行開啟和結(jié)束代碼的trace過程。

Output模塊會對tracer進(jìn)程返回的代碼trace信息進(jìn)程處理生成我們想要的數(shù)據(jù)。其中的tree是對代碼執(zhí)行過程以方法名作為節(jié)點(diǎn)生成樹狀的結(jié)構(gòu),能直接通過tree來還原代碼執(zhí)行時(shí)的方法調(diào)用過程。而Map則記錄tree中每個(gè)節(jié)點(diǎn)的執(zhí)行信息,如消耗內(nèi)存,執(zhí)行時(shí)間等。Output模塊處理完數(shù)據(jù)后會向smartAgent的sendproxy發(fā)送數(shù)據(jù),最后sendproxy會向透視寶服務(wù)器發(fā)送數(shù)據(jù)。 pythonAgent的tracer進(jìn)程能跟蹤到‘call‘, ‘line‘, ‘return‘, ‘exception‘, ‘c_call‘, ‘c_return‘, or ‘c_exception‘事件。

\

依托于各種Web輕量級應(yīng)用框架,Python在Web應(yīng)用上得到最廣泛支持,而透視寶的SmartAgent支持主流的Django、Tornado、CherryPy、Flask、Pylons、Bottle等應(yīng)用框架,保證Python代碼性能數(shù)據(jù)抓取的準(zhǔn)確性和高效能。配合透視寶部署在服務(wù)端的其他應(yīng)用服務(wù)監(jiān)控,包括Apache、Nginx、Tomcat、Weblogic、MySQL、Memcache、Redis、Oracle、MongoDB、PostgreSQL等,開發(fā)和運(yùn)維人員能夠第一時(shí)間發(fā)現(xiàn)應(yīng)用系統(tǒng)的潛在問題,準(zhǔn)確定位應(yīng)用執(zhí)行緩慢的真實(shí)原因。
如何利用透視寶監(jiān)控Python應(yīng)用

用戶可以訪問透視寶產(chǎn)品網(wǎng)站:http://toushibao.com/ ,申請免費(fèi)試用帳號,進(jìn)入應(yīng)用管理,下載Smart Agent并進(jìn)行安裝,安裝完成訪問“系統(tǒng)→插件管理”,找到Smart Agent所安裝的主機(jī),按以下說明來安裝、配置及開啟相關(guān)代碼插件。

\

1、安裝Python應(yīng)用發(fā)現(xiàn)插件

根據(jù)Web容器類型安裝應(yīng)用發(fā)現(xiàn)插件,該插件可自動發(fā)現(xiàn)容器內(nèi)的所有應(yīng)用實(shí)例并生成應(yīng)用拓?fù)鋱D。

1)如果直接使用的Python Server,可以直接跳過本步驟。

2)如果Web容器為Apache

請安裝并配置Apache類型的應(yīng)用發(fā)現(xiàn)插件ApacheApp,配置完成后開啟插件。

3)如果Web容器是Nginx

請首先在插件的配置界面中選擇安裝Nginx類型的應(yīng)用發(fā)現(xiàn)插件NginxApp。安裝完成之后您還需要配置Nginx插件,與Apache不同的是,此時(shí)您需要在主機(jī)上手工編譯,請參考安裝目錄中“./plugins/nginx_path/README”文檔。

2、安裝并開啟Python代碼監(jiān)控插件PythonCode

選擇PythonCode插件安裝并開啟,SmartAgent將自動下載插件至安裝目錄的smart_agent/plugins下。

默認(rèn)會使用系統(tǒng)Python進(jìn)行安裝。修改PythonAgent.sh中PythonCommand值,可安裝至系統(tǒng)中其他Python環(huán)境。

3、重啟Web Server

安裝開啟Python代碼監(jiān)控插件后,可能需要您手動重啟web Server(apachehttpdNginxPython Server等軟件)。

4、查看Python應(yīng)用數(shù)據(jù)

配置完成后,大致兩分鐘后您就可以在“應(yīng)用”模塊中查看數(shù)據(jù)。

關(guān)鍵詞:Python透視寶