【问题标题】:Erlang: Node freezes totaly. Now what?Erlang:节点完全冻结。怎么办?
【发布时间】:2012-08-05 23:04:12
【问题描述】:

平台:windows 7 32bit,erlang R15B01。

我开发了一个 erlang 服务器,可以同时监听 200 个不同的 tcp 端口(200 个 gen_servers)

在中等负载(少数客户端并行)几分钟后,整个节点完全冻结 - 甚至外壳也完全冻结。

如何诊断此问题?是否有针对此类问题的标准 erlang 方法? (内存消耗低,所以不是某种内存泄漏)

重要修改

werl.exe下好像没有这个问题。仅在 erl.exe 下。可能与http://erlang.2086793.n4.nabble.com/erl-exe-dies-but-werl-exe-does-not-on-both-Windows-XP-and-2008R2-with-R14B01-td3335030.html中的相同

【问题讨论】:

  • 我建议您向我们展示更多您的代码

标签: erlang


【解决方案1】:

如果你用kill -SIGUSR1 <pid> 杀死你的进程,erlang VM 将在应用程序启动的目录中生成一个erlang 故障转储文件erl_crash.dump

然后您可以使用crash dump viewer 对其进行分析。

【讨论】:

  • 正确。但这是一个开始。我也可以使用stackoverflow.com/questions/4672572/…
  • 这个问题只发生在windows中。如何在 Windows 下强制转储文件?我尝试使用 procdump,但它创建了一个查看器不理解的非 erlang 转储
  • 也许你可以去任务管理器杀死虚拟机。
  • @Ethan。问题是 erlang 停止工作。使用 TM 杀死它很容易
  • erlang VM 完全冻结了吗?如果没有,您可以使用 shell 强制崩溃:erlang:halt("crash")。
【解决方案2】:

冻结的 erlang shell 可能是由未捕获的退出信号引起的。您可以尝试在 shell 进程中捕获退出(假设它是服务器的父进程),这应该会给您退出原因。见Reference manual on Errors

【讨论】:

  • 试过了。没有任何区别
  • 你检查内存使用了吗?可能虚拟机内存不足。
猜你喜欢
  • 2019-12-31
  • 1970-01-01
  • 2016-12-19
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-09
  • 2015-06-07
相关资源
最近更新 更多