Я использую Cheyenne для относительно высоконагруженного веб-приложения. Работает отлично и быстро. Но у меня проблема, которая начала появляться после обновления до Ubuntu 14.04, или я начал замечать ее тогда, потому что нагрузка увеличилась.
После нескольких дней работы, когда рабочий процесс Rebol должен завершиться, он начинает потреблять 100% ЦП и «ничего не делает». Я посмотрел на процесс с помощью strace, и когда он загружен 100 процессорами, он никак не вызывает ОС. Я посмотрел рабочий код Cheyenne (если там есть какая-то ошибка), и код выполняет команду Rebol exit. Эта команда делает цикл вечным. То же самое, если я попытаюсь убить процесс с помощью sigterm.
Затем я могу убить его с помощью sigkill. Процесс переходит в это состояние только после нескольких дней большой нагрузки, и мне не удалось воспроизвести его в непроизводственной среде или на локальном компьютере.
Мое наивное мнение состоит в том, что он зацикливается навсегда, пытаясь очистить память перед выходом или, может быть, открытые файлы/сокеты. Я просмотрел процессы до/после с помощью lsof (и подобных), но, поскольку событие нелегко воспроизвести, ничего не понял, да.
Мой вопрос: кто-нибудь видел, как Rebol2 переходит в вечный 100%-й цикл при выходе и при каких обстоятельствах? Кто-нибудь знает, как решить эту проблему?