2011-10-18 282 views
2

我使用OpenSTA对Erlang应用程序进行性能测试。测试运行100个虚拟用户。在某些时候,以下错误开始弹出:Yaws进程死亡

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

在此先感谢。

马丁

回答

0

我设法通过增加YAWS配置max_size_cached_file中允许的缓存文件的文件大小来解决此错误。这使得我们的.yaws文件被加载到内存中,并且始终无法访问file:read_file。希望这会节省别人几个小时(或几天:)

1

雅司未能打开文件。这是运行雅各应用程序的用户拒绝的文件读取权限。如果您向运行雅各布的用户添加权限以拥有与雅司食谱有关的所有文件夹,则可能会修复此问题。检查出来,如果所有这些路径都由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. 

在上述源粗体线是哪里不好匹配发生。

检查其雅虎是否以访问其文件夹的权限运行,例如doc根,ssl文件夹和雅各布可能访问文件的其他路径。运行雅司的用户是否可以访问所有必需的文件?

+0

非常感谢您的回答。令人费解的是,测试在Windows下运行(服务器安装在Windows下),它模拟典型的用户互动,我们只有在执行测试时才会看到这些错误。我看到一些调试语句。你能告诉我如何打开它们吗?再次感谢。 –

0

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

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

+0

这并不解决问题。不管怎么说,还是要谢谢你。 –