-
Notifications
You must be signed in to change notification settings - Fork 289
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[已解决] PPPOE拦截法 导致路由器负载过高而崩溃的问题 #195
Comments
感谢贡献。写的时候没这个需求,就没考虑到。如果你测试没问题,可以fork本项目,自己修改好,然后pull requests到本项目,让脚本适应性更好。 |
k2未断电运行一个月了我竟然没发现,不过的确比以前卡点了,但是没崩溃 |
pppoe.log不是脚本运行产生的,脚本只是去读取PPPoE服务器程序生成的文件,并不会写pppoe.log。上面的这个结论是错的。 我之前测试的是路由器启动后,如果pppoe服务器接收到拨号,或者路由器端进行pppoe拨号,就会有日志记录。如果路由器一直没断网,应该不会特别大。你这个日志文件特别大,我暂时也想不到原因。 @Warm-rain 你可以看一下你的日志文件么,看看是不是这么大? |
pppoe.log是日志,肯定会变。现在只能希望楼主能给个几十M的日志看看到底什么情况了。 |
@huipengly 感觉不存在这问题,、他的路由器奔溃应该不是另有原因,我刷的是荒野无灯k2,我刚刚看了下日志文件,只保存前十多分钟的样子,在前面的日志已经自动清除,然后我有观察了下路由器主页的内存可用数和空闲数 可用数 没高过30%,会一直波动,不知这个是否准确,可做参考。 |
我的拨号成功后的pppoe.log后面没变过啊. |
那就确定pppoe.log只记录pppoe服务器接收到拨号,或者路由器端进行pppoe拨号的日志。现在猜不到楼主的问题了。只能等楼主传日志了。 |
在 while do 下边加一句
然后在最后的 done前边再加一个 if语句 如下,这样就可以实现 每天 清理一次 pppoe.log了
done 亲测可用,有问题的话 大家再研究下。 |
@huipengly NK4运行时,使用的grep命令在日志文件过大时也会占用大量CPU,此外,SWAP缓存kswapd0进程也会占用CPU。
应该是PPPOE服务器在不停尝试超时重连一个接口
|
可能跟不同环境有关系吧。想了一下,其实pppoe.log内容不需要存什么,日志里的账号密码存到/etc/config/network里了,然后当前账号也存在username_old这个变量里了,感觉直接在sleep前加上清除就够了。 |
@huipengly 简单加一句应该是不行的,因为NK4还要重新读取最后一次拨号的用户名存到username_old变量,判断是否与目前已连接接口的用户名一致,如果加了这一句应该会发生连上后十秒断网的情况 |
@huipengly 受到启发后我又去找PPPOE的问题,发现可能是由于系统接口WAN的协议配置为PPPOE,服务器尝试拨号此接口,而不停超时重试。不知道 @gmfghp 是否遇到相同问题,能否去试一下。 |
我感觉可行,你看看我这推断对不对,当时百度着写的,有些也记不太清楚了。 if [ "$(grep 'user=' /tmp/pppoe.log | grep 'rcvd' | tail -n 1 | cut -d \" -f 5)" == "]" ]
then
username=$(grep 'user=' /tmp/pppoe.log | grep 'rcvd' | tail -n 1 | cut -d \" -f 2)
fi |
@huipengly 我有这个假想是因为最初发现日志过大这个问题时,就是手动删除日志文件,删除后必断网。看程序确实好像是不存在这个BUG,我明天试一下吧。 |
我已经脱坑了,没有实验环境了。。。 |
@xinxin8816 原版本的东西应该不存在你说的问题。毕竟pppoe日志就是用来记录连接日志的。至于你说的那个WAN口猜想,可能是正确的。最后宣传一波,自己做了一个无心跳的多号多拨版本,可以试试。 |
@LittleWhite-Carry 想了解一下你的多拨版本,最近电信解除了一号一拨的限制 |
@xinxin8816 可以上我的主页去看。有已经打包好的 |
@LittleWhite-Carry 好的,谢谢 |
2017-12-7更新:
我的问题是WAN接口协议配置为PPPOE产生大量无效拨号,日志文件过多导致路由器崩溃。
此问题的通用解决方法见下,或参考huipengly,gmfghp等人的回复。
这个问题仅在没有心跳的地区且路由器长期不重启(包括不限于晚上不断电、断电但有UPS或魔改充电宝给供电)时发生,不满足这个条件的同学可以无视了。
问题在于原有程序,每隔十秒运行一遍PPPOE,导致PPPOE日志文件越来越大(每分钟生成5-6KB,大概不到一个星期就是近百MB的日志文件),如果路由器性能够强,则无压力。但是如果路由器内存较少,kswapd0会将部分进程的页从物理内存交换到SWAP上,这个过程CPU基本会跑满。
开始想到的解决方法是,PING百度服务器,PING不通(即DNS无法解析)时再运行PPPOE,但是试过后发现如果没有接口连接到广域网PING指令根本不能用。
再想到的解决办法,就是转存用户名和密码所在行。日志虽然多,但NK4需要的有价值的信息无外乎就几行,所以:
1、在while do后面加一句提取并转存
echo "$(grep 'user=' /tmp/pppoe.log | grep 'rcvd' | tail -n 1)" >> /tmp/user.log
2、把grep原有路径/tmp/pppoe.log改成/tmp/user.log
3、sleep命令前加一句清除
cat /dev/null > /tmp/pppoe.log
没学过Shell命令,现学现卖,有建议或意见欢迎大佬指出。对了,换行也会被记录到user.log,可以写个if避免这种情况,但反正换行又不占地就算啦
The text was updated successfully, but these errors were encountered: