Процесс Yaws умер

Я провожу тестирование производительности нашего приложения Erlang с помощью OpenSTA. Тест выполняется со 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?

EDIT: как указано @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 документация?

Заранее спасибо.

Мартин


person Martin Dimitrov    schedule 18.10.2011    source источник


Ответы (4)


eacces означает отказ в доступе, коды ошибок описаны в конце документации к файлу: http://www.erlang.org/doc/man/file.html#write_file_info-2

person Lukas    schedule 18.10.2011
comment
Спасибо за ссылку. Вы видели эту ошибку в таком контексте? Что это может означать применительно к процессам? - person Martin Dimitrov; 18.10.2011

Yaws не удалось открыть файл. Это разрешение на чтение файла, которому отказано пользователю, работающему с приложением yaws. Если вы добавите разрешения пользователю, запускающему yaws, на владение всеми папками, относящимися к yaws, это может быть исправлено. чтобы проверить это, попробуйте запустить yaws от имени пользователя root , если все эти пути принадлежат пользователю 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 от имени пользователя с разрешениями на доступ к своим папкам, таким как корень документа, папки ssl и другим путям, по которым yaws может получить доступ к файлам. Имеет ли пользователь, работающий с yaws, доступ ко всем необходимым файлам?

person Muzaaya Joshua    schedule 18.10.2011
comment
Большое спасибо за ответ. Озадачивает то, что тест работает под Windows (сервер установлен под Windows), он имитирует типичное взаимодействие пользователя и мы видим эти ошибки только при выполнении тестов. Я вижу некоторые операторы отладки. Подскажите, пожалуйста, как их включить? Еще раз спасибо. - person Martin Dimitrov; 18.10.2011

В окнах это упрощается. Теперь перейдите к своим Local disk C, Program Files (в Windows 7 может быть Program Files (x86)), наконец, туда, где установлен yaws. Это будет папка: Yaws-VERSION например. Yaws-1.89.

Теперь, когда вы щелкаете правой кнопкой мыши, вы выбираете Properties, а затем во всплывающем окне выбираете Security. В разделе «Безопасность» нажмите edit. Теперь под Group or usernames вы выбираете каждого пользователя (и каждый тип учетной записи) и даете ему все разрешения, то есть чтение, запись, полный контроль и т. д. нажмите Apply, подождите, пока окна внесут изменения, затем нажмите Ok и закройте. Теперь у ваших пользователей должны быть все необходимые разрешения.

person Muzaaya Joshua    schedule 18.10.2011
comment
Это не решает проблему. Спасибо, в любом случае. - person Martin Dimitrov; 18.10.2011

Мне удалось исправить эту ошибку, увеличив размер разрешенных файлов в кеше в конфигурации YAWS max_size_cached_file. Это привело к тому, что наш файл .yaws загружался в память, а не работал с file:read_file все время. Надеюсь, это сэкономит кому-то еще пару часов (или дней :))

person Martin Dimitrov    schedule 25.10.2011