Мультиплексор порта sslh: почему это таким образом ресурсоемкое?

[117984] Разрешения всех папок [118401]777[118402] можно изменить на [118403]755[118404], воспользовавшись приведенным ниже списком.

Вышеприведенная команда изменит все папки внутри [118405]/var/www [118406] на [118407]755[118408]. Для проверки можно воспользоваться командой, приведенной ниже.

Для изменения разрешений всех php-файлов можно воспользоваться приведенной ниже командой.

И снова можно воспользоваться командой [118409]stat[118410], чтобы проверить, изменились ли разрешения. Или вы даже можете использовать

Как [118411]stat[118412], так и [118413]ls -ld[118414] отобразят восьмеричные разрешения файла. [117993]

1
09.07.2014, 14:56
2 ответа
[

] Из случайного обзора источника видно, что автор(ы) слишком усердно использовали []set_nonblock[] в []sslh-select.c[].[

] [

] Если пометить каждый сокет (как он есть) как неблокирующий, то цикл [

] [
while(1) {
    select(… a bunch of non-blocking sockets …);
}
] [

] вокруг линии 230 в связанном файле становится занят-ожиданием. То есть, даже если нет доступных для чтения данных ни в одном из сокетов, select возвращается мгновенно, а затем снова вызывается немедленно. Это довольно ресурсоемкий процессор.[

] [

]Автор близко подошел к тому, чтобы сделать это правильно, с некоторым условным использованием аргумента []timeout[] для []select[], но это не имеет никакого эффекта, если все равно все установлено в неблокирующее состояние.[

] [

]Я не профилировал []sslh[], что является лучшим способом подтвердить, что это реальная причина.[

].
7
27.01.2020, 23:11
[

]Так что теперь эта проблема решается здесь: []https://github.com/yrutschle/sslh/issues/24[][

] [

]msw ответ может быть исчерпывающим, но также ошибочным: []select()[] будет блокировать независимо от статуса сокета []O_NONBLOCK[], в основном это то, для чего он существует, и на самом деле код, который использует блокирующие сокеты при использовании []select()[], является неверным. Из Linux' []select(2)[]: "Под Linux, []select()[] может сообщить дескриптор файла сокета как "готовый к чтению", в то время как последующие блоки чтения".[

] [

]Другими словами, отсутствие установки []O_NONBLOCK[] при использовании []select()[] может привести к полной блокировке программы.[

] [

]Таким образом, хотя что-то и может быть не так, но это не так.[

]: "Под Linux" []select()[]: "Под Linux" []select()[]: "Готов к чтению".
3
27.01.2020, 23:11

Теги

Похожие вопросы