Челюсти процесс умер - PullRequest
2 голосов
/ 18 октября 2011

Я провожу тестирование производительности нашего приложения 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 ?

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

Martin

Ответы [ 4 ]

1 голос
/ 18 октября 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",[]),
                    <b>{ok, Bin} = file:read_file(UT#urltype.fullpath),</b>
                    ?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, папки ssl и другие пути, по которым yaws может обращаться к файлам.Имеет ли пользователь, выполняющий программы yaws, доступ ко всем необходимым файлам?

1 голос
/ 18 октября 2011

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

0 голосов
/ 25 октября 2011

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

0 голосов
/ 18 октября 2011

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

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

...