产生许多过程erlang



随着进程数量的增加,我想通过测量执行某些操作所需的时间来衡量数据库的性能。其目的是绘制一张性能与流程数量的关系图,有人知道怎么做吗?我是埃尔朗的初学者,请点击

假设您的数据库是mnesia,这应该不难。一种方法是具有写功能和读功能。然而,请注意,有几个Activity access contexts患有记忆障碍。要测试write times,您不应该使用transaction的上下文,因为它会立即返回到调用过程,甚至在发生光盘写入之前。但是,对于光盘写入,重要的是要查看名为:sync_transaction的上下文。这里有一个例子:

写入(记录)->乐趣=乐趣(R)->记忆:写(R)结束,mnesia:activity(sync_transaction,Fun,[Record],mnesia_frag)。

只有当记忆表的所有活动副本都已将记录提交到数据光盘文件时,才会返回上述功能。因此,要测试进程增加时的速度,需要有一个record generator、一个a process spawner,一个write function以及最后一个。对于计时,我们有一个内置函数,名为:timer:tc/1, timer:tc/2 and timer:tc/3,它返回执行(完全)给定函数所花费的确切时间。简而言之,我会这样做:

-模块(stress_test)。-compile(export_all)
-define(LIMIT,10000)
-记录(簿{isbn,标题价格版本})
%%确保此表为{type,bag}
-record(write_time{isbn,进程数,写入时间})
%%假设表(书)已存在%%假设记忆已经运行
start()->ensure_gproc(),tv:start(),spawn_many(?LIMIT)
spawn_many(0)->好啊spawn_many(N)->派生(?模块,进程,[]),spawn_many(N-1)
process()->gproc:reg({n,l,guid()},已忽略),计时器:apply_interval(计时器:秒(2),?MODULE,write,[]),接收<lt;"停止">gt->退出(正常)结束
total_processes()->proplists:get_value(size,ets:info(gproc))div 3。
ensure_gproc()->案例列表:的关键成员(gproc,1,application:which_applications())true->好啊false->应用程序:启动(gproc)结束
guid()->random:seed(now()),MD5=erlang:MD5(term_to_binary([随机:统一(152629977),{node(),now(,make_ref()}])),MD5List=lists:nthtail(3,binary_to_list(MD5)),F=乐趣(N)->f("~2.16.0B",[N])端,L=[F(N)||N<-MD5List],列表:展平(L)
generate_record()->#book{isbn=guid(),title=guid((),price=guid()}
write()->Record=generate_Record(),乐趣=乐趣(R)->ok=记忆:写(R),ok结束,%%这是我们测量的实际写入{Time,ok}=timer:tc(记忆,活动,[sync_transaction,Fun,[Record],mnesia_frag]),%%我们节省的时间,进程的数量%%在那一刻NoteTime=#write_time{isbn=记录#book.isbn,进程数=总进程数(),write_time=时间},mnesia:activity(transaction,Fun,[NoteTime],mnesia_frag)。

现在这里有依赖项,特别是:gproc从这里下载并将其构建到erlang lib路径中下载gproc

要运行此操作,只需调用:stress_test:start().即可。表write_time将帮助您绘制进程数与写入时间的关系图。随着进程数量从0增加到上限(?LIMIT),我们注意到在给定时刻写入给定记录所花费的时间,也注意到当时的进程数量


更新
f(S)->f(S,[])。f(S,Args)->lists:flat(io_lib:format(S,Args))。
这就是缺失的功能。抱歉
记住要研究表write_time,使用应用程序tv会打开一个窗口,您可以在其中检查记忆表。使用此表可以查看随着进程数量的不断增加而增加的写入时间/或降低的性能

我遗漏的一个元素是使用time()记录写入操作的实际时间,这可能是一个重要参数。您可以将其添加到write_time表格的表格定义中。

另请查看http://wiki.basho.com/Benchmarking.html

您可能会看到tsunghttp://tsung.erlang-projects.org/

最新更新