-
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
热更新lua代码导致skynet工作线程死锁 #1637
Comments
我不认为这是 skynet 的问题。 死锁发生在 freopen64 里,你可以 google 到一些关于 freopen 和 fclose 发生 deadlock 的问题(例如:https://www.cygwin.com/bugzilla/show_bug.cgi?id=24963 )。你可以尝试升级 crt ,看是否有 bug 需要修复。同时也检查进程打开文件数目有没有超过上限。 另外,freopen 只发生在 binary 文件中。我认为可以避免 binary 源码的使用。或者修改代码,直接用二进制方式打开源文件,不要走 freopen 。 |
非常感谢!! |
如果是agent模式热更确实会瞬间打开大量文件 我的方案是热更的文件内容先保存到加锁的hashmap,然后通知agent热更从map里面取 |
我们这边不是agent模式的,服务不是很多,同步热更的,所以同时打开的文件数不会太多。 |
线上游戏服,今早玩家反馈卡顿,上服务器查看情况,发现cpu、负载很低,查看日志发现某服务出现大量的endless,并且当前服务没有任何其他日志输出(其他服务正常)。基于这些情况,执行 “pstack PID“ 查看skynet进程的线程情况发现 Thread 2 异常,具体如下:
看线程堆栈,像是线程调用luaL_loadfilex_ 造成的死锁,比较难复现。
skynet 版本1.5,lua版本是5.4.3
The text was updated successfully, but these errors were encountered: