передается в командную строку, проблема с памятью исчезла, и загрузка ЦП в режиме ожидания обычно ниже 0,2%. Процессор и память выглядят так же, как если бы приложение Phoenix работало с консоли вне IIS.

аюсь создать прототип небольшого веб-приложения, чтобы узнать, смогу ли я использовать Phoenix и Elixir для создания веб-приложений для интрасети, которые будут использоваться моими сотрудниками в моей компании. Мы всегда были типичным магазином Microsoft .NET, но мне интересно играть с некоторыми другими технологиями, среди которых Elixir и Phoenix.

У меня работает виртуальная машинаWindows 10 а такжеIIS 8, Я установилHttpPlatformHandler а также на виртуальной машине для запуска приложения Phoenix и передачи ему запросов от IIS (для этого есть причина, о которой я расскажу чуть позже).

Когда я запускаю свое приложение Phoenix в Windows автономно, оно работает отлично. Я не вижу никаких проблем. Когда я запускаю свое приложение Phoenix, используяHttpPlatformHandler и IIS, я вижу, что процесс erl.exe постоянно работает и потребляет около35-40% процессора (я работаю с 2 ядрами и 8 ГБ оперативной памяти на виртуальной машине). Я также вижу, как память постоянно растет без остановки. Через пару минут он превысит 1 ГБ и перейдет к 2 ГБ (я наблюдаю за использованием памяти с помощью Process Explorer). В приложении Phoenix нет ни загрузки, ни активных запросов. Это происходит как в среде разработчиков, так и в продуктах.

Я хочу запускать Phoenix за IIS, потому что это приложение для внутренней сети, оно будет работать в домене Windows, и большинство пользователей будут пользователями Windows. Я создал плагин, который будет читать токен пользователя Windows изX-IIS-WindowsAuthToken HTTP заголовок, которыйHttpPlatformHandler добавляет к запросам, которые он перенаправляет в процесс Phoenix, и я использую набор NIFS для вызова Windows API, чтобы получить Windows SID и домен \ имя пользователя аутентифицированного пользователя, чтобы установить сеанс и авторизовать пользователя.

Кто-нибудь пробовал это раньше и видел ту же проблему? Я относительно новичок в отладке Elixir и Phoenix и хотел бы получить несколько советов о том, что я могу сделать, чтобы попытаться выяснить, почему среда выполнения Erlang делает это, или как определить, что я делаю в своем коде.

Я не уверен, что это я, потому что я вижу, что это происходит в простом приложении Phoenix, которое генерируется недавно с использованиемmix phoenix.new.

Для справки, вот мойweb.config для моего приложения Phoenix:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="httpplatformhandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="C:\Projects\neucode\run.bat"
        arguments=""
        stdoutLogEnabled="true"
        forwardWindowsAuthToken="true">
      <environmentVariables>
        <environmentVariable name="MIX_ENV" value="prod"/>
      </environmentVariables>
    </httpPlatform>
  </system.webServer>
</configuration>

мойrun.bat файл:

mix phoenix.server

Я очень ценю любую помощь или предложения, которые может предоставить любой. Пожалуйста, дайте мне знать, если я могу предоставить что-нибудь еще, что поможет диагностировать проблему.

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

ОБНОВИТЬ

Я выяснил, как подключиться к моему приложению Phoenix, работающему в IIS, с помощью Observer благодаряэтот смысл, Похоже, что проблемным процессом является пользовательский процесс:

Я начал отслеживать этот процесс и порт, с которым он связан, и вижу непрерывный поток событий, которые, как я предполагаю, являются событиями приема с пустыми данными:

Я думаю, оглядываясь по сторонам, что это процесс пользователя ядра. Кто-нибудь знает, как я могу понять, что это за порт и почему он посылает непрерывный поток событий?

Ответы на вопрос(1)

Ваш ответ на вопрос