-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
The iperf3 server hangs while printing the report #1735
Comments
@RizziMau, it may be that the problem is when the server is waiting for the "Done" from the client. However, since the client already terminated, the control socket should not be available already between the processes and the server should have failed / timeout. Therefore, it is not clear why the server did not end. In any case, few questions:
|
@RizziMau, I believe I understand what is the problem ("DONE" state sent by the client is not received by the server and the server is waiting for it forever). I have a proposed fix for the problem, using the Can build and run iperf3 for the server (at least) from branch "issue-1735-timeout-select-when-not-in-running-state" in "https://github.com/davidBar-On/iperf.git" ( |
@davidBar-On, I'm testing your iperf3 version, I will keep you update. Just a remark: Iperf3 has different timeouts for different aspects:
I think it would be preferable to use a specific timeout parameter for the closure of the control connection. |
@RizziMau, thanks for testing the change. It would help validating it in general (and of course finding if it solves your issue). Regarding the use of Currently the Note that regardless of the option name, the change implements timeout for most of the state-change control messages. I believe it solves a general issue in iperf3 that server/client are getting stuck if a control message is not received (your issue is one example). |
@davidBar-On, I've been using your version (from branch "issue-1735-timeout-select-when-not-in-running-state" in "https://github.com/davidBar-On/iperf.git") since July and I haven't encountered any issues. |
@davidBar-On , I'm still using your iperf3 version (from branch "issue-1735-timeout-select-when-not-in-running-state" in https://github.com/davidBar-On/iperf.git) and sometimes I encounter segmentation faults. In my setup:
Segmentation faults occur on the iperf3 server side during the connection setup from the client (in UDP reverse with 4 parallel data streams), as you can see in the attached log: Could this occasional problem be due to your version of iperf3? |
@RizziMau, I am not sure what the problem is, but since the segmentation fault happens at the start of the test, it may be because of the issue that is fixed by PR #1801 (trying to cancel non-existing thread). I am not sure about that, since the client should also fail (unless the problem is related to a change between 3.16 and 3.17.1). In any case, I merged PR #1801 changes into branch "issue-1735-timeout-select-when-not-in-running-state". Can you build and run using the new code version? This will not fix the the test failure, but at least instead of SEGV there may be a useful error message. |
Context
I am using iperf3 in a product that tests the UDP data throughput of mobile networks.
Sometimes the iperf3 server hangs while printing the report, and all subsequent tests fail with the message
iperf3: error - the server is busy running a test. Try again later.
The only solution I have found is to kill and restart the iperf3 server.
Version of iperf3: 3.16
Hardware:
on the iperf client side: Samsung A52s
on the iperf server side: Server with Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
Operating system:
on the iperf client side: Android 11
on the iperf server side: Ubuntu 22.04.4 LTS
Bug Report
Expected Behavior
The server should not hang
Actual Behavior
The server sometimes hangs while printing the report, and all subsequent tests fail with the message
iperf3: error - the server is busy running a test. Try again later.
The issue is not systematic but occurs after several hours.
When the iperf3 server hangs:
The only solution I have found is to kill and restart the iperf3 server.
Execute an iperf test (from client to server) and an iperf reverse test (from server to client) every 10 minutes.
The iperf3 server is started with the following command:
iperf3 --server --interval 0 -p 5202 -1
Note that the "-1" option causes iperf3 to exit after one transfer, but a daemon restarts it after 2 seconds.
The iperf3 client command (on the Android phone) is:
iperf3 --forceflush -c x.x.x.x -V -p 5202 -u -t 15 -i 5 -fK -4 -b 5000000 -l 1200 -P 4 -O 0
(x.x.x.x is the IP address of the server)
I've attached the logs of iperf3 server executed with the
--debug=3
option:iperf3server_debug3_ok.log reports the correct behaviour:
at timestamp 06:54:11 iperf3 prints the report and exits, according to the
-1
optioniperf3server_debug3_ok.log
iperf3server_debug3_blocked.log reports the wrong behaviour:
at timestamp 06:42:15 iperf3 prints the report but it does not exit
at timestamp 06:52:23 iperf3 has been killed and it traces "iperf3: interrupt - the server has terminated"
iperf3server_debug3_blocked.log
The text was updated successfully, but these errors were encountered: