雅司病程死了

时间:2011-10-18 07:17:03

标签: 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_server,acceptor0,2},
                 {proc_lib,init_p_do_apply,3}]}

测试继续进行。我找不到有关此错误的信息。 eaccesError accessing a resource吗?

编辑:正如@Muzaaya Joshua所指出,电话file:read_file(UT#urltype.fullpath)在功能ut_read(UT)中崩溃。我重新编译了模块并打印了上下文。错误为eaccesUT成立:

{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个或更少的虚拟用户运行测试时,我没有看到这些错误。那么Missing permission for reading the file, or for searching one of the parent directories.怎么可能因为read_file文档中描述了错误?

提前致谢。

马丁

4 个答案:

答案 0 :(得分:1)

eacces表示访问被拒绝,错误代码在文​​件文档的末尾描述:http://www.erlang.org/doc/man/file.html#write_file_info-2

答案 1 :(得分:1)

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.

上述来源中以粗体显示的行是发生不匹配的地方。

检查yaws是否以具有访问其文件夹的权限的用户身份运行,例如doc root,ssl文件夹和yaws可能访问文件的其他路径。运行偏航的用户是否可以访问所有必需的文件?

答案 2 :(得分:0)

在Windows中,这很容易。现在转到Local disk CProgram Files(在Windows 7中,可能是Program Files (x86)),最后转到安装雅司的位置。这将是一个文件夹:Yaws-VERSION,例如Yaws-1.89

现在,当您右键单击此按钮时,选择Properties,然后在弹出窗口中选择Security。在安全性下,单击edit。现在在Group or usernames下,您选择每个用户(以及每种类型的帐户)并为其授予所有权限,即读取,写入,完全控制e.t.c.单击Apply,等待Windows执行更改,然后单击Ok并关闭。您的用户现在必须拥有所有必需的权限。

答案 3 :(得分:0)

我设法通过增加YAWS配置max_size_cached_file中允许的缓存文件的文件大小来修复此错误。这使我们的.yaws文件加载到内存中,而不是始终与file:read_file一起访问。希望这可以节省其他人几个小时(或几天))