Erlang 雅司病死亡

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},

我使用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_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个或更少的虚拟用户运行测试时,我没有看到这些错误。那么,为什么
缺少读取文件或搜索父目录的权限。
文档中描述了错误

提前谢谢


Martin

eacces表示访问被拒绝,错误代码在文件文档末尾描述:

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下),它模拟典型的用户交互,我们只有在执行测试时才能看到这些错误。我看到一些调试语句。你能告诉我怎么打开吗?再次感谢。这并不能解决问题。无论如何,谢谢你。