最近写了一个程序对udp SERVER进行压测,测试程序很简单,就是启1000个进程,每个进程不停的发包。
start_test() ->
lists:foreach(fun(_X) -> spawn(?MODULE,test,[]) end,lists:seq(1,1000)).
test() ->
{ok,Socket} = gen_udp:open(0,[binary,{active,false}]),
testloop(Socket).
testloop(Socket) ->
gen_udp:send(Socket,?IP,?PORT,<<"hello">>),
testloop(Socket).
问题是程序一启动,CPUy就100%了,vm 的启动是用 erl -smp disable +K true 已经启用epoll了。strace的结果如下
strace -T -tt -p 24241 -c
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
61.13 0.018473 0 594436 clock_gettime
37.35 0.011286 0 284586 sendto
0.84 0.000255 0 25423 epoll_wait
0.53 0.000161 2 79 munmap
0.14 0.000043 0 324 read
0.00 0.000000 0 59 gettimeofday
0.00 0.000000 0 324 writev
0.00 0.000000 0 56 mmap2
------ ----------- ----------- --------- --------- ----------------
100.00 0.030218 905287 total
测试机AMD的双核CPU,主频2G,SUSE10系统,
在我的笔记本上(Ubuntu10.04)同样的测试程序,并没有出现上面的clock_gettime调用。
各位老大帮忙看看程序是哪里出问题了。
问题补充:
<br />1000个经常猛发udp包,当然cpu100%。 gen_udp自己本身没有什么开销,基本上是send系统调用在发力。clock_gettime是ERTS的poll在调用. Erlang是基于事件派遣的,每次事件检查后都调用取时间函数。
<br />
<br />谢谢。那如何才能发的更快呢?将并发的个数减少?我试了10个并发,发包速度可以达到50K/s,这就是极限了吗?能不能再提高呢?小弟初学erlang,对网络也不是很熟,先谢谢了。
相关推荐
《gen_lex_hash_pc:MySQL交叉编译的关键工具详解》 在IT行业中,数据库管理系统是核心组件之一,而MySQL作为开源关系型数据库的代表,广泛应用于各类项目中。在特定环境下,如嵌入式设备或资源有限的PC平台,我们...
这个“华硕Z87主板BIOS_updater_for_4th_Gen_Intel_Core_CPU.zip”压缩包就是用于更新该主板BIOS的工具,以确保与最新硬件和软件的兼容性,解决潜在问题,提高系统的稳定性和性能。 BIOS更新通常包含以下好处: 1. ...
1. 理解mcdf_root_test::gen_stop_callback()和 mcdf_root_test::run_stop_callback()的作用。 2. 按照实验代码中的要求,实现测试用例mcdf_burst_test,并 且在波形中检查三个通道的激励是否按照符合BURST发送要求...
在实际应用中,开发者可能会遇到`gen_tcp`的`close`函数与`delay_send`选项之间的交互问题。本文将深入探讨这两个函数的工作原理以及它们可能导致的问题。 `gen_tcp:close/1`是用于关闭一个TCP连接的函数,它会发送...
bin/sh: ./gen_test_char: cannot execute binary file ,这个时候我们需要编一个X86版本的gen_test_char来取代他,如果不想编译,可以直接下载,放到httpd-2.2.22/server目录下,继续make,编译成功 最终安装的东西...
本项目"Gen_NN.rar_Gen:NN__DLL_visual c_算法优化_遗传 神经"结合了这两种方法,旨在通过遗传算法优化神经网络的性能,且使用C++编程语言进行实现。 首先,让我们深入了解遗传算法。遗传算法是一种模拟自然选择和...
gen_unix是Unix套接字的Erlang接口。 gen_unix的主要目的是允许访问fd和凭据传递所需的套接字辅助数据。 警告:gen_unix仍在开发中,并且需要进行很多更改。 例子 文件描述符传递 打开2个shell提示,并在每个提示中...
gen_lang gen_lang是国际化的Dart库。 提取消息以生成所需的dart文件。 现在,国际化的三个步骤 准备Json文件 运行gen_lang 在编码中使用它 安装 将这些库添加到pubspec.yaml dependencies: flutter_...
在ry-vue-v3.8.6数据库设计中,gen_table表和gen_table_column表是紧密相关的,gen_table表存储业务表信息,而gen_table_column表存储业务表字段信息。qrtz_blob_triggers表则用于存储Blob类型的触发器信息。本设计...
《gen_bittorrent:Erlang中的P2P种子生成器》 在IT行业中,BitTorrent是一种广泛应用的点对点(P2P)文件共享协议,它允许用户通过网络高效地分发大文件。Erlang,作为一种强大的并行和分布式计算语言,也被广泛...
标题"Gen_Signature_Android2"指的是一个特定的工具,它用于生成Android应用的签名,这通常是在发布应用到Google Play或其他第三方市场之前所必需的步骤。这个工具可能是为简化开发者的工作流程而设计的,使得他们...
签名过程通过数字签名技术,对APK的内容进行哈希计算并添加开发者私钥,这样任何对APK的修改都会导致签名无效。 2. **签名流程**:首先,开发者使用密钥对APK进行签名,这个过程涉及到生成密钥对(公钥和私钥),...
《Erlang gen_server在OcamlAsync中的实现探索》 Erlang的gen_server是其并发模型的核心组件,它提供了一种强大的状态管理和错误处理机制。而在OCaml语言中,尽管有着自己的并发库如Async,但直接移植或模仿Erlang...
gen_amqp ####License: MIT ####Copyright: 2012, 2013 SiftLogic LLC gen_amqp是一种更容易处理 AMQP 连接的行为。 它使用handle_basic_deliver/3和handle_basic_cancel/2的附加回调扩展了gen_server行为。 除此...
表情符号哈希轻量级,零依赖的库,用于以表情符号样式生成哈希 :...hash-gen : $ > npm install emoji-hash-gen# or$ > yarn add emoji-hash-gen 用法import { getHash } from 'emoji-hash-gen' ;getHash ( 'Hell
《Android应用签名详解——以Gen_Signature_Android.apk为例》 在移动应用开发领域,尤其是Android系统中,应用的签名是确保软件安全性和完整性的关键环节。本篇文章将详细探讨Android应用签名的重要性、原理以及...
标题 "srio_response_gen_srio_gen2_0_srio_gen_srio_reponse_SRIO_gen2_SR" 提到的是一个与SRIO(Serial RapidIO)相关的响应生成模块,它可能是一个硬件描述语言(如Verilog或VHDL)设计的源代码文件。SRIO是一种...
标题“Gen_Signature_Android2.zip”中的"Gen_Signature"指的是生成签名的过程,而"Android2"可能表示这是针对Android平台的第二个版本的工具或方法。这个压缩包文件包含一个名为"Gen_Signature_Android2.apk"的应用...
《gen_http:构建可插拔客户端的实验性通用HTTP接口》 在Erlang编程语言中,gen_http库提供了一个实验性的通用HTTP接口,它的核心特性在于其可插拔的客户端实现。这个设计允许开发者根据具体的应用场景和性能需求,...
- 心跳机制用于检测连接是否中断,防止网络问题导致的长时间无响应。心跳消息由客户端和服务端的定时进程定期发送。 - 如果心跳超时,相关进程将发送警告或关闭连接。 5. ** OTP 监督树和进程管理**: - Erlang...