mqtt 消息并发处理(四)

本文探讨使用MQTT协议控制VPN服务端的启动与停止,分析了在订阅函数中处理耗时操作的策略,以及对系统性能的影响。通过性能测试,如ulimit参数检查、进程与线程数统计,揭示了系统资源的使用情况,尤其是在大量并发线程和进程的场景下。同时,记录了服务器内存与CPU占用的变化,以及不同数量的openvpn服务端对系统性能的具体影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

性能测试:

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(vpnStr);  startopenvpn
启动mqtt    消耗6M
发送1000个请求 内存没有下降 


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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值