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