2011-10-18 75 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

這並不解決問題。不管怎麼說,還是要謝謝你。 –