我使用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)
中崩溃。我重新编译了模块并打印了上下文。错误为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个或更少的虚拟用户运行测试时,我没有看到这些错误。那么Missing permission for reading the file, or for searching one of the parent directories.
怎么可能因为read_file文档中描述了错误?
提前致谢。
马丁
答案 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 C
,Program 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
一起访问。希望这可以节省其他人几个小时(或几天))