端口多路复用器 sslh:为何如此占用资源?

gio*_*321 1 networking debian vps

我刚刚发现了sslh.

我尝试将它安装在运行 Debian 7 wheezy 的 512MB RAM VPS 上。配置后sslh,我尝试连接到我的一台 apache2 虚拟主机,CPU 使用率立即上升到 50-60%,由于缺乏资源,甚至连 ssh-ing VPS 几乎不可能。

  • 这是正常的吗?
  • 有没有有效的替代方案?

我试图解决的问题是sslh,除了 80 和 443 之外,许多免费 wifi 热点几乎阻塞了所有端口,而且我经常需要使用 OpenVPN 连接到我的家庭服务器,这是由我的 ISP 提供的。

您有其他解决方案建议吗?

msw*_*msw 7

从对来源的随意审查来看,作者似乎在使用set_nonblockin sslh-select.c 时过于热心了

如果您将每个套接字(正如它所做的那样)标记为非阻塞,则循环

while(1) {
    select(… a bunch of non-blocking sockets …);
}
Run Code Online (Sandbox Code Playgroud)

在链接文件中的第 230 行左右变成忙等待。也就是说,即使在任何套接字上都没有可供读取的数据,select 也会立即返回,然后立即再次被调用。这是相当处理器密集型的。

作者几乎是正确的,有条件地使用了timeout参数 toselect但如果所有参数都设置为非阻塞,则没有任何效果。

我没有描述sslh他确认这是真正原因的最佳方式。