pysnmp和netsnmp比較

概況

用python獲取snmp信息有多個現成的庫可以使用,其中比較常用的是 netsnmppysnmp 兩個庫。網上有較多的關于兩個庫的例子。
本文重點在于如何并發的獲取snmp的數據,即同時獲取多臺機器的snmp信息。

netsnmp

python的netsnmp,其實是來自于net-snmp包。python通過一個c文件調用net-snmp的接口獲取數據。因此,在并發獲取多臺機器的時候,不能夠使用協程獲取。因為使用協程,在get數據的時候,協程會一直等待net-snmp接口返回數據,而不會像socket使用時那樣在等待數據時把CPU切換給其他協程使用。從這點上來說,使用協程和串行獲取沒有區別。
可以使用線程,多線程獲取(當然也可以使用多進程)。多個線程同時調用net-snmp的接口獲取數據,然后cpu在多個線程之間不停切換。當一個線程獲取一個結果后,可以繼續調用接口獲取下一個snmp數據。
經過測試,python3.6版本安裝對應到net-snmp-5.7.2版本可以正常工作。

pysnmp測試

pysnmp是用python實現的一套snmp協議的庫。其自身提供了對于異步的支持,直接安裝pysnmp包即可,

兩者性能測試

網上摘取測試比較數據如下:
在同一個環境下,對兩者進行了性能測試。兩者對198個host,10個oid進行采集。

image.png

可以看到netsnmp的采集速度跟線程數有關。當線程數增大到一定程度,采集時間不再縮短。因為開辟線程同樣會消耗時間。而已有的線程已經足夠處理。
pysnmp性能較之略差一下。詳細分析pysnmp在添加任務(執行getCmd時)消耗了約1.2s,之后的采集約消耗3.3秒。
在增加了oid數,在進行實驗。host仍然是198個,oid是42個。

image.png

實際測試數據

對于netsnmp,環境上運行測試,snmp get操作比較多,單個訪問在30多ms左右;walk操作時間比較長,訪問50個host,9個oid,啟用20個線程或者進程,對于多線程和多進程,時間沒有太大差別,都在80s-100s之間。再啟用更多都線程或者進程時間也不好縮短,由此可見,對于walk操作,時間大部分花費在異步等待上,多線程整體時間并沒有顯著改善,而且進程開銷更大,因此啟動20個線程輪詢snmp數據;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 常用操作在本教程中,我們將逐步構建并運行一些不同的SNMP命令請求和通知。我們將使用 最簡單的PySNMP同步高級...
    Joncc閱讀 14,086評論 0 2
  • 必備的理論基礎 1.操作系統作用: 隱藏丑陋復雜的硬件接口,提供良好的抽象接口。 管理調度進程,并將多個進程對硬件...
    drfung閱讀 3,568評論 0 5
  • 我是在深入學習 kotlin 時第一次看到協程,作為傳統線程模型的進化版,雖說協程這個概念幾十年前就有了,但是協程...
    前行的烏龜閱讀 99,995評論 32 182
  • 工欲善其事,必先利其器。作為一款強大的開源軟件,Zabbix號稱“Monitor Everything”,其所依賴...
    樂維_lwops閱讀 3,457評論 7 2
  • 陌上花開等君來(原創)太陽公公的笑臉 車,在前行, 我閉上眼, 仿佛在時空的機上, 穿行。 眼前掠過一片片 血紅,...
    臻事隱閱讀 2,288評論 21 42