-
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
下了份今天最新的代码跑https客户端压力测试,跑一会崩了,重现了两次 #1835
Comments
信息不足,无法定位问题。建议自己进一步 debug 。 |
@yuanfengyun 请问有找到问题么,我目前也遇到这样的问题 |
能否提供一下复现的测试代码? |
我是外网正是环境出现的,内网还没复现 |
这是握手失败了,看起来是多线程的问题,你开tsan/asan看一下 |
@Marskey 你的 libssl 版本是多少? |
这个是我的堆栈信息和题主差不多 |
https://www.openssl.org/blog/blog/2017/02/21/threads/index.html @Marskey 更新 openssl 试试? |
不好意思,搞错了,线上环境是1.1.1, 然后我发现openssl有个相关的issue,不知道有没有关联openssl/openssl#12898 |
更新到3.0以上版本试试? |
已经知道问题了,就是多线程调用openssl的问题。给后续查类似问题的参考。不要在多个服务中来访问https协议 |
怎么复现?我尝试在本地虚拟机开多个服务调用https请求,并没有出现 |
建议nginx 正反向代理,这样保持简洁,稳定,高性能 |
@huahua132 接受端用 test/simpleweb.lua 把里面http改成https就可以了,openssl 版本1.0.1f 和 1.1.1都能复现 local skynet = require "skynet"
local httpc = require "http.httpc"
local mode = ...
local host = "https://127.0.0.1:8001"
if mode == "sub" then
skynet.start(function()
skynet.dispatch("lua", function(_, _, cmd)
if cmd == "init" then
skynet.ret(skynet.pack(true))
elseif cmd == "https" then
local respheader = {
time = os.time()
}
while true do
local status, body = httpc.post(host, "/", respheader)
print(status)
end
end
end)
end)
else
skynet.start(function()
if not pcall(require,"ltls.c") then
print "No ltls module, https is not supported"
return
end
local subs = {}
for _ = 1, 1000 do
local sub = skynet.newservice(SERVICE_NAME, "sub")
local ret = skynet.call(sub, "lua", "init")
subs[sub] = ret
end
for sub, ret in pairs(subs) do
if ret then
skynet.send(sub, "lua", "https")
end
end
end)
end
|
@lvzixun 是不是需要自己实现一个锁? |
还想提个 issue 反馈问题,看到这里在讨论,就在这里反馈好了。
但目前 ltls 库并没有,那么对于使用 openssl 1.0 版本的项目来说,相关锁操作是空操作,多线程并发操作情况下,会导致某静态数组的静态变量索引超过限制值,再终会导致内存非法访问而崩溃。 |
求一个通过代理发送https请求的例子,看了以下httpc.lua的实现好像是不支持代理的 |
也可以用 Moon 附带的 HTTP 服务替代 httpc, 用 cluster 发起 HTTP 请求,代价是多了一跳,我认为是可以接受的
|
The text was updated successfully, but these errors were encountered: