systemd socket with" Accept = true"在服务推出之前有很长的延迟

时间:2015-02-05 07:49:24

标签: c++ linux sockets systemd

我有一个systemd .socket与@ .service配对。套接字包含" Accept = yes"为了通过指定端口接受来自客户端的TCP连接,之后创建一个@ .service实例,该实例执行我的服务器程序来处理TCP连接。目前,我正在使用连接到服务器的一个客户端(Windows软件)进行测试(linux c ++)。

我的问题是,对于第一次客户端连接尝试,TCP连接成功但在systemd启动关联的@ .service之前有很长的延迟(5-10秒)。任何后续连接几乎会立即启动@ .service,除非收到TCP RST数据包。如果接收到TCP RST数据包,则在@ .service启动之前,下一次连接将再次作为5-10秒的延迟,并且该周期将自行重复。

我的.socket文件非常简单。对于[Socket]部分,它实际上只是指定一个ListenStream端口和Accept = true。

任何想法可能导致这种延迟?

1 个答案:

答案 0 :(得分:0)

我想到的第一件事是systemd本身没有足够的CPU来接受连接,但可能这不是它,因为你认为它与TCP RST数据包有关。

您可以在/etc/systemd/system.conf上更改日志级别以进行调试,并获得有关systemd何时实际接受连接的更多信息。

它的工作方式是,systemd侦听.socket文件上的套接字并将epoll放在文件描述符上。只要套接字上有活动,systemd就会在其事件循环中获得通知。然后它接受连接并启动.service文件中指定的程序。

相关问题