Erlang 雅司病死亡
我使用OpenSTA对我们的Erlang应用程序进行性能测试。该测试使用100个虚拟用户运行。在某个时刻,以下错误开始弹出:Erlang 雅司病死亡,erlang,yaws,Erlang,Yaws,我使用OpenSTA对我们的Erlang应用程序进行性能测试。该测试使用100个虚拟用户运行。在某个时刻,以下错误开始弹出: Yaws process died: {{badmatch,{error,eacces}}, [{yaws_server,ut_read,1}, {yaws_server,deliver_dyn_file,5}, {yaws_server,aloop,3},
Yaws process died: {{badmatch,{error,eacces}},
[{yaws_server,ut_read,1},
{yaws_server,deliver_dyn_file,5},
{yaws_server,aloop,3},
{yaws_server,acceptor0,2},
{proc_lib,init_p_do_apply,3}]}
测试将继续运行。我找不到有关此错误的信息。eacces
是否表示访问资源时出现错误
EDIT:正如@Muzaaya Joshua
所指出的,调用文件:read\u file(UT#urltype.fullpath)
在函数UT\u read(UT)
中崩溃。我重新编译了模块并打印了上下文。错误为eacces
和UT
保持:
{urltype,yaws,
{file_info,14088,regular,read_write,
{{2011,9,13},{11,51,42}},
{{2011,10,17},{17,59,44}},
{{2011,3,16},{13,18,58}},
33206,1,3,0,0,0,0},
"/handler.yaws",
"c:/Temp/harmony/script/../www/handler.yaws",
"/",undefined,undefined,"text/html",
"/handler.yaws",undefined}
这个文件handler.yaws
是我们应用程序的入口点,在每次请求时都会被调用。当我使用100个或更少的虚拟用户运行测试时,我没有看到这些错误。那么,为什么缺少读取文件或搜索父目录的权限。
文档中描述了错误
提前谢谢
Martineacces表示访问被拒绝,错误代码在文件文档末尾描述:Yaws无法打开文件。这是运行yaws应用程序的用户被拒绝的文件读取权限。如果您向运行yaws的用户添加权限,使其拥有与yaws相关的所有文件夹,则此问题可能会得到修复。要检查它,请尝试以root身份运行yaws,如果所有这些路径都由root拥有。此时的yaws_server.erl源文件如下所示:
ut_read(UT) ->
?Debug("ut_read() UT.fullpath = ~p~n", [UT#urltype.fullpath]),
case yaws:outh_get_content_encoding() of
identity ->
case UT#urltype.data of
undefined ->
?Debug("ut_read reading\n",[]),
{ok, Bin} = file:read_file(UT#urltype.fullpath),
?Debug("ut_read read ~p\n",[size(Bin)]),
Bin;
B when is_binary(B) ->
B
end;
deflate ->
case UT#urltype.deflate of
B when is_binary(B) ->
?Debug("ut_read using deflated binary of size ~p~n",
[size(B)]),
B
end
end.
ut_读取(ut)->
?调试(“ut#u read()ut.fullpath=~p~n”,[ut#urltype.fullpath]),
case yaws:outh_get_content_encoding()的
身份->
案例UT#urltype.data of
未定义->
?调试(“ut_读取”、[]),
{ok,Bin}=file:read_文件(UT#urltype.fullpath),
?调试(“ut_read~p\n”,[size(Bin)],
箱子
什么时候是二进制(B)->
B
结束;
放气->
案例UT#urltype.deflate的
什么时候是二进制(B)->
?调试(“使用大小为~p~n的压缩二进制文件读取ut_”,
[尺码(乙)],,
B
结束
结束。
上述来源中粗体的一行是发生错误匹配的地方。
检查yaws是否以有权访问其文件夹(如文档根目录、ssl文件夹和yaws可能访问文件的其他路径)的用户身份运行。运行yaws的用户是否有权访问所有必需的文件?在windows中,这样做很容易。现在转到您的本地磁盘C
,程序文件
(在windows 7中,可能是程序文件(x86)
),最后转到安装yaws的位置。这将是一个文件夹:Yaws-VERSION
例如Yaws-1.89
现在,当您右键单击此文件夹时,选择Properties
,然后在弹出窗口中选择Security
。在安全性下,单击编辑。现在,在组或用户名
下,选择每个用户(以及每种类型的帐户)并授予其所有权限,即读、写、完全控制e.t.c。单击应用
,等待windows执行更改,然后单击确定
并关闭。您的用户现在必须拥有所有必需的权限。我通过增加YAWS配置中允许的缓存文件的文件大小来修复此错误最大缓存文件大小。这使得我们的.yaws文件被加载到内存中,而不是一直使用file:read\u file
进行访问。希望这能为其他人节省几个小时(或几天)谢谢你的链接。你在这种情况下见过这个错误吗?当应用于流程时,它意味着什么?非常感谢您的回答。令人费解的是,测试在Windows下运行(服务器安装在Windows下),它模拟典型的用户交互,我们只有在执行测试时才能看到这些错误。我看到一些调试语句。你能告诉我怎么打开吗?再次感谢。这并不能解决问题。无论如何,谢谢你。