2

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

提前致谢。

马丁

4

4 回答 4

1

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

于 2011-10-18T08:52:21.280 回答
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
        身份->
            case UT#urltype.data 的
                未定义->
                    ?Debug("ut_read 读数\n",[]),
                    {ok, Bin} = file:read_file(UT#urltype.fullpath),
                    ?Debug("ut_read read ~p\n",[size(Bin)]),
                    斌;
                B 当 is_binary(B) ->
                    乙
            结尾;
        放气->
            case UT#urltype.deflate 的
                B 当 is_binary(B) ->
                    ?Debug("ut_read 使用大小为 ~p~n 的压缩二进制文件",
                           [尺寸(B)]),
                    乙
            结尾
    结尾。

上述源代码中的粗体行是错误匹配发生的地方。

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

于 2011-10-18T08:54:34.590 回答
0

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

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

于 2011-10-18T10:15:01.663 回答
0

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

于 2011-10-25T10:03:21.400 回答