-
Notifications
You must be signed in to change notification settings - Fork 247
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
redsocks2负载比较高的时候崩溃 #39
Comments
另外,在高负荷运行一段时间就会提示 |
这种情况是因为你没改允许打开文件数限制。在启动redsocks2 时要用 ulimit -n 4096 设置下。具体ubuntu
|
@semigodking , |
现在还会死掉?你编译时把调试信息带上,用最新代码。到时把core dump发给我看看。 @semigodking https://github.com/semigodking , — |
Daemon off 启动时timeout我怀疑是你service没配置正确, service一直在等redsocks2进程结束
|
刚才看了一下服务器,在一点多的时候又挂掉了。错误信息是一样的。 Mar 5 13:16:53 VPS kernel: [13287.863978] redsocks[20782]: segfault at 9c ip b76ff684 sp bf8af7cc error 4 in libevent-2.0.so.5.1.9[b76ea000+4d000] 我先在把log日志设置为on,一会再等等看,再挂掉的话,把日志信息给你贴上来。 |
另外那个service配置,我一直都是默认的配置,应该不是有错呀,这是我的service配置文件,就是设施deamon=off,就启动不了了。但是事实上redsocks是启动了的,因为我看到有数据包在发送,只是系统检查service redsocks start timeout,就又关闭了。 这是我的配置文件: #Author: Apollon Oikonomopoulos [email protected] #PATH should only include /usr/* if it runs after the mountnfs.sh script #Exit if the package is not installed #Read configuration variable file if it is present #Load the VERBOSE setting and other rcS variables #Define LSB log_* functions. #Function that starts the daemon/service do_start() #Function that stops the daemon/service do_stop() case "$1" in : |
那很显然是service写的有问题而不是程序问题
|
能提供一个您现在正在用的service文件吗?谢谢。 |
这是最新的抓取到的错误日志。 Mar 5 16:46:05 VPS redsocks[4090]: [116.70.201.54:49670->104.23.18.17:80]: data relaying started |
这就是一个典型的nodaemon的service $ cat lircd.service [Service] [Install] 另外,你可以试试把 On Sat, Mar 5, 2016 at 5:37 PM, X.K. YANG [email protected] wrote:
|
哈哈,现在晚上负载更高,那个问题还没出现就已经达到报错:Too many open files了。 这个怎么解决呢? |
Ulimit 是仅当前shell 有效 ,要全局有效要改系统配置。
|
您好,我已经改了系统的配置文件了,你看现在对系统参数的检查结果:
root hard nofile 500000 root soft nofile 500000 但是,重启系统之后,看到redsocks 的还是Max open files 1024 4096 files。系统各方面检验结果现在都对了,就是针对redsocks 这个Max open files没有变。我刚开看了shadowsocks的源代码,它的代码在初始化的时候有自动加的一行: #Function that starts the daemon/service do_start() 还是没起作用。 |
OK,现在Max open files这个问题已经解决了。现在测试#define REDSOCKS_AUDIT_INTERVAL 改成60*60,看看能不能解决segfault的问题。 |
修改之后,测试4个小时,现在还没出现问题。以前基本就是1个小时多就崩溃了。 |
@semigodking,感谢帮忙,测试到现在都没有问题,应该是没问题了。这个issue可以管了。 |
刚才开了一下系统日志发现redsocks又崩溃了,还是同意的问题,同样的报错信息,只是今天比昨天没修改前崩溃的频率低了一些。今天崩溃2次。 Mar 6 15:08:02 VPS kernel: [21929.719660] redsocks[16782]: segfault at 9c ip b7743684 sp bffa039c error 4 in libevent-2.0.so.5.1.9[b772e000+4d000] |
那你可继续调大甚至关了 audit,对你这server, 我想应该没有大的影响
|
@semigodking 感谢及时回复; 您说#define REDSOCKS_AUDIT_INTERVAL 改成60X60改成60X600之类的吗?怎么样可以在代码里关闭audit呢? |
是。注释掉redsocks_audit 里的实现即可。
|
@semigodking,还有一个问题,我觉得redsocks很有可能有内存泄漏,我用top命令实时显示redsocks的内存占用量,刚开始启动的时候只有5M,然后开始逐步上升,最后崩溃之前已经是几十M了,就是从开始运行,一直在无限制的膨胀……。 |
这个我也有怀疑,但最近还没查出原因。
|
嗯,我运行了大概5个小时,占用内存从最初的5M已经涨到60M了,这个是个大麻烦,要是这么膨胀,一般的路由器肯定没法用了。 |
一般路甴没有问题,我几天才增加几m 。应该和负荷有一定关系。
|
我现在才注意到,你用的是http-relay这种方式.我之前其实并没有怎么关注这一块相关的代码,也没有仔细测试过.刚看了看相关代码,我觉得http-relay的代码有很多值得改进的地方,特别是对内存使用方面需要改进.如果你懂C的话,建议你看看改改. |
我是懂一点C,但是就是不太了解这个程序的架构,所以一下次吃透有点困难,但是我的基本上知道,问题就出在http-relay数据包的转发那个地方,基本上是转发一次就会有一点内存泄漏,因为我的服务器负载比较高,每天50万次的访问量,所以这个问题就很容易暴露出来了。很可能就是http-relay某个地方内存回收有问题。 |
你试试这个patch看看效果吧,我没有多少时间仔细去改这个http-relay,现在http-relay工作应该是可以的,只是效率比较低.这个patch尝试略优化一下效率,解决一个可能出现的内存泄漏.我只编译通过,但没有验证过.建议你先在非生产环境验证下. |
Android上的makefile是一个Android.mk的文件,这个是我自己新建的。和你程序里那个带的那个makefile不一样,估计问题就在这。 |
把那几个文件照着样子加进去就可以了。
|
嗯,我试试。 |
嗯,那个编译过去了,现在socks5-udp.c编译的时候报这个错: [armeabi] Compile thumb : redsocks <= socks5-udp.c |
现在就差socks5-udp.c这个文件编译通不过了,其他都编译成功了。 |
Refuel.h 需要包含
|
程序里面没有Refuel.h这个文件呀。 |
难道你说的是redudp.h吗? |
是的,手机打字,自动更正搞错达。
|
嗯,OK,那个编译过去了,现在缺少twalk,估计也是昨天那个问题,要找个twalk.c复制进来吧? redudp.c:651: error: undefined reference to 'twalk' |
是 可以从musl 里搞出来
|
好的,我去找找。 |
现在直接调用libevent2的编译好的文件是可以编译通了,但是用libevent2源文件参与编译的话就会报如下错误: |
那个是系统的文件不能通过这种方式获得。 你的目标平台的版本问题或者编译方式不对。
|
弄了一天终于编译成功了,你需要把这个支持Android的平台配置文件合并进去吗?还是在Wiki简单写一下就OK了? |
在wiki上写一下就可以了,以后慢慢再合进去。谢谢!
|
嗯,OK,这两天感谢你大力帮忙哈。 |
不客气
|
@semigodking 最近这一段使用又发现一个新问题,还要麻烦您帮忙。 Apr 2 10:28:28 vps redsocks[22736]: getsockopt: No such file or directory |
@semigodking 忘了补充一下了,内存基本上增加不明显,期间也没有什么错误,redsocks就突然处于假死状态不接受任何数据包了。基本都是发生在晚上8-10点钟的网络访问高峰期。高峰期连接数大概有2000-3000个。 |
这么有规律就定时重启 redsocks 呗,几秒钟。 |
@rampageX 这个显然是个笨办法啊,我同时在线有1000-2000人,redsocks重启的话,这一两千人网络连接就会全部断掉,必须重连,一天这样搞几次,我这服务器就不用要了,人都跑完了…… |
你用的是trunk上最新版吗? |
@semigodking 感谢回复。我是用的十几天前你发布的那个最新版。最初十多天一直没有问题,这两天周末加上放假,用的人一下增加很多,就出现这个问题了。 |
这个问题我一下子也是想不出原因。给你个建议,也许可避免这个问题:
|
这样有个附加的好处:可以利用多核心并发能力加强。
|
@semigodking 您这个建议很好,我要好好试一下。非常感谢。如果有新的发现,我再来汇报。再次感谢。 |
即使是同一80端口,也可以利用iptables根据一定的规则劈开成几份。根据你CPU核心数决定redsocks2的进程数,并可设置进程对核心的affinity。
|
@semigodking 非常感谢您的建议,等我先研究一下您说的该怎么实现,然后再向您请教。非常感谢您的建议。 |
Hi semigodking谢谢开发这个项目,给我们的网络工作带来了极大的便利。
但是最近我碰到一个问题,是在Ubuntu上测试发现的。
就是redsocks2在负载比较高的时候会莫名其妙的崩溃,报的错误是,
redsocks[29116]: segfault at 9c ip b7740684 sp bfde666c error 4 in libevent-2.0.so.5.1.9[b772b000+4d000]
然后redsocks2就崩溃了,系统日志可以看到这个:
Mar 5 04:57:00 VPS systemd[1]: redsocks.service: main process exited, code=killed, status=11/SEGV
Mar 5 04:57:00 VPS systemd[1]: Unit redsocks.service entered failed state.
Mar 5 04:57:00 VPS systemd[1]: redsocks.service failed.
在这个错误之前就会报一些小错误:redsocks[29116]: [73.233.25.115:55405->104.23.18.178:80]: shutdown(relay, SHUT_WR): Transport endpoint is not connected
我搜了一下这个问题和libevent的一个bug有关系,这个如果您google搜索segfault error libevent就能类似的报告。求助有其他的解决办法吗?比如重新自己编译libevent修正这个bug,还是redsocks稍微调整一下避免这个bug呢?
The text was updated successfully, but these errors were encountered: