-
求关于 erlang(sys模块\gen模块)与ejabberd(p1_fsm)的timeout 解决方法10
最近测试发现 日志总是出现timeout提示。
分析发现都是erlang代码里面gen.erl 模块中的wait_resp_mon方法惹的祸。
wait_resp_mon中有receive——after——Timeout ,最终确定就是此处的Timeout引起。
写了一个小程序,测试了一下,receive 在有很多消息发过来是,处理不了的时候就会执行Timeout的程序。
请问有没有好的办法解决这个问题?
wait_resp_mon方法:
wait_resp_mon(Node, Mref, Timeout) -> receive {Mref, Reply} -> erlang:demonitor(Mref, [flush]), {ok, Reply}; {'DOWN', Mref, _, _, noconnection} -> exit({nodedown, Node}); {'DOWN', Mref, _, _, Reason} -> exit(reason)%%langxw after Timeout -> erlang:demonitor(Mref), receive {'DOWN', Mref, _, _, _} -> true after 0 -> true end, exit(timeoutmon)%%langxw end.
下面是测试日志
=INFO REPORT==== 2010-12-05 20:09:53 === I(<0.25621.0>:ejabberd_odbc_sup:100) : langxwgetstatus Inejabberd_odbc_sup on 100line Proc'ejabberd_odbc_sup_testrsa.igrslabdns.com',is_process_alive=true ..catchER A1=exit, A2={timeout,{sys,get_status, ['ejabberd_odbc_sup_testrsa.igrslabdns.com',1000]}}... ** Reason for termination = ** {timeout, {p1_fsm,sync_send_event, [<0.288.0>, {sql_cmd, {sql_query, ["SELECT deviceid FROM devices WHERE deviceid = '", "tsung","';"]}}, 2000]}}
是的是超时,但我不知道是哪里引起超时的?难道是达到一定性能限制了?当我写一个简单程序在测试时,我创建了1000个进程,每个进程发送10000次消息。超时我设置的0.5秒。这时候 消息应该规远远不断的发送过来。不应该超时。问题应该是 Pid ! {self(),...} 后,进入receive。self()没有在规定的时间内回复消息。造成此问题的原因会不会是资源耗尽造成的?还是有其他原因?
2010年12月06日 15:46
目前还没有答案
相关推荐
Erlang OTP设计原则中的Gen_Fsm行为是一个关键的概念,用于构建健壮、可扩展的并发应用程序。Gen_Fsm,即通用有限状态机,是一种行为模式,它提供了一种结构化的方法来处理具有多种状态和事件的系统。本文将深入探讨...
erlang-gen_tcp手册,详细完整,网络tcp开发好东东
Sys和Proc_Lib部分讲解了Erlang系统的基本调试方法和特殊进程的处理。应用章节则阐述了如何定义和组织应用,包括应用的概念、回调模块、资源文件、目录结构、应用控制器、加载和卸载、启动和停止、配置和应用启动...
gen_tcp是Erlang OTP(开放电信平台)提供的一种行为模块,它允许程序员以面向过程的方式处理TCP连接。gen_tcp提供了创建、监听、接受和关闭TCP套接字的函数,以及发送和接收数据的基本操作。 **Erlang的并发特性**...
综上所述,"plain_fsm"是一个面向Erlang开发者的实用工具,它提供了一种标准化的方法来构建和操作有限状态机,简化了并发和分布式系统中的状态管理任务。通过深入理解和使用这个库,开发者可以更高效地解决复杂的...
erlang_23.0.2-1版本 centos7 64bit esl-erlang_23.0.2-1_centos_7_amd64.rpm
通过`-behaviour(Behaviour)`,模块可以声明为特定行为的回调模块,如OTP标准行为`gen_server`、`gen_fsm`、`gen_event`和`supervisor`。 4.2.3 记录(Record)定义 使用`-record(Record, Fields)`定义记录,记录...
Erlang B 和 Erlang C 是在电信领域中广泛使用的两个数学公式,用于预测和管理电话交换系统的呼叫处理能力。这两个公式由丹麦工程师 Agner Krarup Erlang 在20世纪初开发,对于理解通信系统中的呼叫占用率、阻塞率和...
标题中的“ejabberd中mod_privacy_odbc.erl实现没有完全遵循xmpp协议”指出,ejabberd服务器的模块mod_privacy_odbc在处理数据库操作时可能存在与XMPP(可扩展消息处理即时协议)标准不完全一致的问题。ejabberd是一...
通过本案例的学习,我们不仅了解了如何使用Erlang构建高性能的在线IP查询服务,而且还深入学习了OTP的关键行为如gen_server、gen_fsm和gen_event的具体应用。这种实践不仅有助于初学者快速掌握Erlang的核心概念,还...
在这个压缩包中,我们有一个名为"Erlang_B_model.pdf"的文件,它很可能是这样的手册的一部分,提供了关于Erlang B模型的理论、公式以及查表方法。 **Erlang B公式**表达了一个服务系统(如电话交换机)在固定数量的...
在"erlang_otp_win64_25.0"这个标题中,我们可以提取出几个关键点: 1. **Erlang**:这是一种函数式编程语言,以其在处理并发性和容错性方面的强大能力而闻名。Erlang的设计理念是让程序员能够轻松地构建能够并行...
Erlang中的`gen_server`模块是OTP (Open Telecom Platform)设计原则的一部分,它提供了一种标准的方式来实现客户端-服务器架构。gen_server行为模块旨在简化并发处理和错误管理,允许多个客户端共享服务端的资源。它...
从给定的文件信息中,我们可以提炼出一些关于Erlang语言以及其参数化模块的重要知识点。 首先,Erlang是一种严格、动态类型的函数式编程语言。它的特点是没有破坏性更新,即数据不可变。Erlang内置了对并发的支持,...
Erlang OTP (Open Telephony Platform) 是一种高级编程语言,专为构建高并发、分布式、容错性强的系统而设计。22.3 版本是 Erlang OTP 的一个稳定版本,它提供了许多增强的功能和性能改进。下面将详细介绍这个版本的...
Erlang OTP 19_win64是一款专为Windows 64位系统设计的Erlang软件开发工具包,它包含Erlang编程语言和OTP(Open Telecom Platform)框架。Erlang是一种强大的、动态类型的函数式编程语言,特别适合构建高可用性、...
- **2.3.1 有限状态机**:Erlang中的Gen_Fsm行为允许实现有限状态机。 - **2.3.2 实例**:提供了一个Gen_Fsm行为的实例。 - **2.3.3 启动一个Gen_Fsm**:如何启动一个有限状态机。 - **2.3.4 事情通知**:事件被...
esl-erlang_23.0和rabbitmq-3.8.4windows版本 直接下载安装就行,可以直接下载就可安装,非常的方便 ,欢迎大家下载 注意事项: 1. Erlang版本和RabbitMQ版本要配套 (Erlang23.0, RabbitMQ3.8.4) 2. amd芯片请乖乖...
### Erlang程序语言知识点 #### 一、Erlang简介 Erlang是一种由Ericsson计算机科学实验室设计和开发的程序语言。它最初是为了满足电信系统的需求而创建的,后来开源化以促进其在Ericsson之外的发展。Erlang特别...
OTP库提供了许多实用的模块,如gen_server、gen_event和gen_fsm,这些都是Erlang并发编程的基础。 总而言之,Erlang9.rar是一个包含Erlang/OTP 20.0 Windows 64位安装程序的压缩包,主要用于安装Erlang环境,以...