mqtt 消息并发处理(四)

mqtt来控制服务端的启动与停止

订阅函数中尽量不要有耗时的操作。的停止,很快就可以执行完毕,可以放在订阅的回调函数中。但的启动比较耗时,在订阅函数中,只用完成动态端口号的分配.

性能测试:

ulimit -a查看用于shell启动进程所占用的资源默认设置 

ps -ef  | wc -l  //查看运行的进程数
ulimit -u//最大进程数 
cat /proc/sys/kernel/pid_max#查系统支持的最大进程数,一般会很大,相当于理论值

cat /proc/26179/status//查看一个进程启动了多少个线程

线程的stack所占用的内存,可用命令ulimit -s查看,一般是8192KB(8M)

du -sh *//查看文件大小
free -m//查看缓存的命令

echo 1 > /proc/sys/vm/drop_caches//清理缓存的命令 
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches

Linux上,最大线程数目是: 
number of threads = total virtual memory / (stack size*1024*1024),由于我机子的virtual memory为unlimited,,当然。在32位系统上,进程空间是4G,其中0-3G是用户空间(0x0-0xBFFFFFFF), 3G-4G是内核空间。 
因此理论上讲,用户空间大小/栈大小=最大线程数。3072M/8M=384,考虑到系统的占用,主线程(管理线程)等,应该是在380左右. 也许在你的系统上是382. 

mqtt不调用 system(Str);  startopen
启动mqtt    消耗6M
发送1000个请求 内存没有下降 


开启一个open消耗1.8M,左右的内存。不属于内存泄漏。
服务器内存下降到600M左右,开启卡顿。
本地2G的虚拟机,大概能开启500个,不卡顿。

阿里云  开启1000个 open服务端
mqtttest  cpu 占用率最高%20  500个线程  26秒
mqtttest  cpu 占用率最高%20  400个线程  19秒
mqtttest  cpu 占用率最高%20  350个线程  20秒  剩余880
mqtttest  cpu 占用率最高%20  320个线程  20秒  剩余850           开启500个open6miao

你可能感兴趣的:(mqtt)