1、ubuntu硬件配置
4核,8G內存,磁盤50G,ubuntu16.04
2、python 啓動單進程代碼
#!/usr/bin/python3
import paho.mqtt.client as mqtt
import psutil
import os
import datetime
import sys
from datetime import *
#MQTTHOST = "10.10.40.242"
MQTTHOST = "114.115.223.53"
MQTTPORT = 1883
MQTTTOPIC = "caoft/test/"
mqttClient = mqtt.Client()
def get_head_info():
try:
raise Exception
except:
f = sys.exc_info()[2].tb_frame.f_back
return '%s, %s, %s, %s, %d' % (str(datetime.now()), f.f_code.co_filename, f.f_code.co_name, str(f.f_lineno),os.getpid())
def print_time(message,flag):
print ("%s message=%s" % (get_head_info(),message))
if(flag):
pid = os.getpid()
p = psutil.Process(pid)
print('----------------')
# 進程ID
print('Process id : %d' % pid)
# 進程NAME
print('Process name : %s' % p.name())
# 獲取進程bin路徑
print('Process bin path : %s' % p.exe())
# 獲取pid對應的路徑
print('Process path : %s' % p.cwd())
# 進程狀態
print('Process status : %s' % p.status())
# 進程運行時間
print('Process creation time : %s' % datetime.datetime.fromtimestamp(p.create_time()).strftime(
"%Y-%m-%d %H:%M:%S"))
# CPU使用情況
print(p.cpu_times())
# 內存使用情況
print('Memory usage : %s%%' % p.memory_percent())
# 硬盤讀取信息
print(p.io_counters())
# 打開進程socket的namedutples列表
print(p.connections())
# 此進程的線程數
print('Process number of threads : %s' % p.num_threads())
# 連接MQTT服務器
def mqtt_connect():
mqttClient.connect(MQTTHOST, MQTTPORT, 60)
mqttClient.loop_start()
# 消息處理函數
def mqtt_message_come(lient, userdata, msg):
print(get_head_info()+" mqtt_message_come")
print(get_head_info()+" "+ msg.topic + ":" + str(msg.payload.decode("utf-8")))
# subscribe 消息訂閱
def mqtt_subscribe(mqtt_topic):
mqttClient.subscribe(mqtt_topic, 1) # 主題爲"test"
mqttClient.on_message = mqtt_message_come # 消息到來處理函數
print(get_head_info() + " mqtt_subscribe " + mqtt_topic)
# publish 消息發佈
def mqtt_publish(topic, msg, qos):
mqttClient.publish(topic, msg, qos)
def mqtt_subscribe_test(mqtt_topic):
mqtt_connect()
mqtt_subscribe(mqtt_topic)
def main(mqtt_topic):
mqtt_subscribe_test(mqtt_topic)
while True:
pass
if __name__ == '__main__':
#print(get_head_info()+'參數個數爲:', len(sys.argv), '個參數。')
#print(get_head_info()+'參數列表:', str(sys.argv))
#print(get_head_info()+'參數列表:', sys.argv[1])
main(MQTTTOPIC+str(sys.argv[1]))
3、多進程測試實例 shell腳本啓動
#!/bin/bash
#python3 mqtt_sub.py 1 &
#python3 mqtt_sub.py 2 &
counter=1
loop=700#啓動的進程數量
b=0
while true
do
echo "counter==" $counter
counter=$[counter+1]
b=$(( $counter % 5 ))
#sleep 1
python3 mqtt_sub.py $counter &
if [ $counter == $loop ] ; then
break;
fi
if [ $b == 0 ] ; then
sleep 1
fi
done
4、結論
ubuntu環境這樣啓動python程序最多支持600個客戶端,經過推測應該是python程序的問題,壓測失敗。但是python單實例測試發佈和訂閱是沒有問題的
發現這個問題以後,提出改進使用mosquitto自帶的mosquitto_sub功能測試
MQTT簡介之十四--Ubuntu下Mosquitto shell mosquitto_sub 性能測 https://blog.csdn.net/caofengtao1314/article/details/106812135