ngrok 1.x 内存泄露 bug 的解决方案

问题描述

部署在服务器上的 ngrok server,时不时会出现内存泄露而导致程序被杀掉,不厌其烦,作者也说了有严重的内存泄漏等问题,且不再维护。

解决方案

既然官方已经不维护了,也就无法从软件层面去解决问题,那只能另辟蹊径了。

首先要明白一点,当 ngrok server 进程被杀死后,客户端其实会有重连机制的。基于这一点,我们只有保证当ngrok server 进程死掉后,自动再重新启动即可。

具体做法为,定时监控 ngrok server 进程是否还在运行,如果已被杀死,则重启,下面直接上脚本。

auto_restart_ngrok.sh

新建 auto_restart_ngrok.sh 文件,具体位置自己定,为了方便,我直接放 root 用户的 home 目录下。

将下面的脚本拷贝到 auto_restart_ngrok.sh 文件中,其中 你的ngrok启动脚本,需要替换成自己的启动脚本,比如 nohup /opt/local/ngrok/bin/ngrokd -domain="ngrok.sprainkle.com" -httpAddr=":8002" -httpsAddr=":8003" -tunnelAddr=":4000" > /dev/null 2>&1 &

#!/bin/bash

result=`ps -ef | grep ngrokd | awk '{print $8}' | sed -n 'p'`

running=0
for r in $result
do
if [[ $r =~ "ngrokd" ]];then
    echo "ngrok is still running."
    running=1
fi
done

if [ $running == 0 ]
then
    `你的ngrok启动脚本`
fi

设置定时任务

# 编辑工作表
crontab -e

# 进入编辑模式后,将下面的脚本插在最下方,最后保存退出就可以啦
*/1 * * * * /root/auto_restart_ngrok.sh

目前按照这个方案,已经运行一小段时间了,大致没什么问题,如果有什么坑,会及时在这里更新的~~~

完!