-
Notifications
You must be signed in to change notification settings - Fork 4.2k
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
关于simpleweb #1998
Comments
你可以先调试测试一下,具体的 close 包是哪一行代码什么时机发出的。 |
调试不知道从哪里下手 因为我使用的simpleweb这个案例跑服务, 也是这个情况. 我在限制发送100个请求时, 发现日志仅有78条
而且刚好错误请求也在22条,
这里曾经怀疑是否因为 |
lua 是无法直接调用系统 api 的,所以真正能 close 的地方只有在 C 中。在 C 里加几行 log 就能知道发生了什么。 正常逻辑的 close 只发生在这一行 https://github.com/cloudwu/skynet/blob/master/skynet-src/socket_server.c#L506 这里的实现区分了两种 close 的逻辑:一种是无论有没有未发送完的数据都立刻关闭,一种是必须等所有数据发送完毕。这个可以调试时查看 https://github.com/cloudwu/skynet/blob/master/skynet-src/socket_server.c#L158 这里的 shutdown 字段,看有没有使用错误。 |
因为所有对 socket 的操作都只在 socket_server.c 中,所以在这个文件中加 log ,就能了解到底 write 了什么数据,什么时候 close 。 我觉得调试还是比较容易的。 |
其实我已经排查了在 其实底层估计没问题, 只是奇怪的是为什么会有部份请求丢失, 如果我使用go搭的web服务器却不会丢(怀疑网络问题), 文件打开数了也控制了. |
如果 C 层只收到 80 条,那就是 80 。因为 lua 自己无法直接处理 socket 。 如果在 C api 这个层面丢 accept ,你得调大 backlog 。 |
我调到512还是不行(设置了仅仅100的请求量)。 |
你应该很容易确认问题是出在 C API 上,还是对它们的调用上。看看 accept 成功了多少连接,都 write 了多少数据,什么时候 close 的。 |
你的压测工具是自己写的吗?有可能多次请求使用同一条socket,而服务器这边每次处理完一条之后就会socket.close() 可以简单验证一下,把simpleweb 修改为循环读取socket数据。
|
oha开源工具, 我晚点测试下 |
调整simpleweb.lua支持socket链路复用,我Mac上测试的结果。
(不过 |
确实是链路复用的问题, 只要开启了--disable-keepalive就可以保证请求数量正确. |
问题严重性较低, 长时间找不到原因, 还请麻烦提点一下.
背景:
本人按照simpleweb的案例编写了一套适应skynet的web服务功能, 该服务使用仅为http, 非https.
问题1:
背景: 在使用压力测试工具时, 具体数据可以看下面提供的数据.
问题点: 大量的请求处在
connection closed before message completed
状态.问题2:
背景: 在使用压力测试工具时, 服务器文件打开数也设置65535, 具体情况可以看下面提供的图片.
问题点:请求过程中一起开始时在一个稳定在一定的并发数, 但是过一段时间后会掉到0, 再过一段时间就会恢复部份并发数, 以此循环.
期间查看了机器状态, cpu和内存在低负载.
题外
由于花了很多时间, 控制变量法测试.
使用远程服务器, SkynetWeb服务,出现问题.
使用远程服务器, 使用Go的Gin框架搭建的服务, 不出现问题.
使用本地服务器, 不出现问题.
Additional context
这里提供了部分测试数据. 这里的设置了文件打开数较低时为了避免长时间的处在问题2中,
Last
由于本人第一次发issue, 格式错误请见谅, 还有数据不足的话, 我尽可能提供.
The text was updated successfully, but these errors were encountered: