Upload speed gradually slows down

Expected behaviour

Uploads occur between 10 ~ 50mbps

Actual behaviour

Uploads starts with 500mbps and gradually slows down to 1 ~ 2 mbps

Steps to reproduce

  1. Move a file to owncloud directory at Windows
  2. Open owncloud to start files sync
  3. Move cursor up to green bar, showing upload speed

Server configuration

Operating system: Ubuntu 22.0.4 LTS

Web server: NGINX 1.22

Database: MariaDB 10.6.7

PHP version: 7.4

ownCloud version: 10.13.2.3

Storage backend (external storage): local SSD

Client configuration

Client version: 5.0.2

Operating system: Windows 11 64bits

OS language: PT_BR

Installation path of client: C:\Program Files\ownCloud

Logs

  1. Client logfile:
24-01-05 19:14:11:551 [ info gui.account.state ]:	checkConnectivity blocking: false "HIDDEN_USER@HIDDEN_DOMAIN"
24-01-05 19:14:11:551 [ debug gui.account.state ]	[ OCC::AccountState::checkConnectivity ]:	"HIDDEN_USER@HIDDEN_DOMAIN" The last ETag check succeeded within the last  30 s ( 19 s). No connection check needed!
24-01-05 19:14:21:479 [ info sync.networkjob.put ]:	PUT of "https://HIDDEN_DOMAIN/remote.php/dav/uploads/HIDDEN_USER/2390361949/0000006503777581" FINISHED WITH STATUS "OK" 201 "Created"
24-01-05 19:14:21:479 [ info sync.propagator.upload.ng ]:	Chunked upload of 38229114 bytes took 56413 ms, desired is 60000 ms, expected good chunk size is 40659898 bytes and nudged next chunk size to  38479965 bytes
24-01-05 19:14:21:479 [ debug sync.database.sql ]	[ OCC::SqlQuery::exec ]:	SQL exec: Estimated query: "INSERT OR REPLACE INTO uploadinfo (path, chunk, transferid, errorcount, size, modtime, contentChecksum, url) VALUES ( 'ORGANIZAR BKPS/toprelay.zip' , '0', '2390361949' , '0' ,  '9196422886', '1703079391' , 'SHA1:f13f7d76b8d017a41c836d08af1964a83e08c0f2', '' )" Actual query: "INSERT OR REPLACE INTO uploadinfo (path, chunk, transferid, errorcount, size, modtime, contentChecksum, url) VALUES ( 'ORGANIZAR BKPS/toprelay.zip' , 0, 2390361949 , 0 ,  9196422886, 1703079391 , 'SHA1:f13f7d76b8d017a41c836d08af1964a83e08c0f2', '' )" Try: 0
24-01-05 19:14:21:479 [ debug sync.database.sql ]	[ OCC::SqlQuery::exec ]:	Last exec affected 1 rows.
24-01-05 19:14:21:479 [ debug sync.database ]	[ OCC::SyncJournalDb::commitInternal ]:	Transaction commit "Upload info" and starting new transaction
24-01-05 19:14:21:480 [ info sync.networkjob ]:	Created OCC::PUTFileJob(OCC::Account("HIDDEN_USER@HIDDEN_DOMAIN"), "https://HIDDEN_DOMAIN/remote.php/dav/uploads/HIDDEN_USER/2390361949/0000006542006695", "PUT", Original-Request-ID: "da8a56d4-dbb9-45f2-beb5-34b1ed20d82b", X-Request-ID: "da8a56d4-dbb9-45f2-beb5-34b1ed20d82b") for OCC::PropagateUploadFileNG(0x25d133c5da0)
24-01-05 19:14:21:480 [ debug sync.networkjob ]	[ OCC::AbstractNetworkJob::slotFinished ]:	Network job finished OCC::PUTFileJob(OCC::Account("HIDDEN_USER@HIDDEN_DOMAIN"), "https://HIDDEN_DOMAIN/remote.php/dav/uploads/HIDDEN_USER/2390361949/0000006503777581", "PUT", Original-Request-ID: "33140d43-f942-4a2b-824a-5845c4a3ca53", X-Request-ID: "33140d43-f942-4a2b-824a-5845c4a3ca53")
24-01-05 19:14:51:504 [ debug gui.scheduler.etagwatcher ]	[ OCC::ETagWatcher::startOC10EtagJob ]:	Starting etag check for folder "ownCloud" "C:/Users/lucka/ownCloud/"
24-01-05 19:14:51:504 [ info sync.networkjob ]:	Created OCC::RequestEtagJob(OCC::Account("HIDDEN_USER@HIDDEN_DOMAIN"), "https://HIDDEN_DOMAIN/remote.php/dav/files/HIDDEN_USER/", "PROPFIND", Original-Request-ID: "c793a8b4-21f0-430d-b2c7-1d47458331e8", X-Request-ID: "c793a8b4-21f0-430d-b2c7-1d47458331e8") for OCC::Folder(0x25d11bd5820)
24-01-05 19:14:52:428 [ info sync.networkjob.propfind ]:	LSCOL of QUrl("https://HIDDEN_DOMAIN/remote.php/dav/files/HIDDEN_USER/") FINISHED WITH STATUS "OK"
24-01-05 19:14:52:428 [ debug sync.networkjob ]	[ OCC::AbstractNetworkJob::slotFinished ]:	Network job finished OCC::RequestEtagJob(OCC::Account("HIDDEN_USER@HIDDEN_DOMAIN"), "https://HIDDEN_DOMAIN/remote.php/dav/files/HIDDEN_USER/", "PROPFIND", Original-Request-ID: "c793a8b4-21f0-430d-b2c7-1d47458331e8", X-Request-ID: "c793a8b4-21f0-430d-b2c7-1d47458331e8")
  1. Web server error log:
2023/12/22 19:27:00 [emerg] 25397#0: still could not bind()
2023/12/22 19:38:36 [emerg] 456#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2023/12/22 19:38:36 [emerg] 456#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2023/12/22 19:38:36 [emerg] 456#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2023/12/22 19:38:36 [emerg] 456#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2023/12/22 19:38:36 [emerg] 456#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2023/12/22 19:38:36 [emerg] 456#0: still could not bind()
2023/12/26 13:30:55 [alert] 344218#0: *14605 open socket #24 left in connection 10
2023/12/26 13:30:55 [alert] 344218#0: aborting
2023/12/26 19:14:52 [alert] 516547#0: *61 open socket #4 left in connection 4
2023/12/26 19:14:52 [alert] 516547#0: aborting
2023/12/27 03:33:17 [alert] 573174#0: *48 open socket #26 left in connection 5
2023/12/27 03:33:17 [alert] 573174#0: aborting
2024/01/05 21:56:38 [alert] 1169337#0: *3 open socket #25 left in connection 4
2024/01/05 21:56:38 [alert] 1169337#0: aborting
2024/01/05 22:02:29 [alert] 1175327#0: *113 open socket #4 left in connection 7
2024/01/05 22:02:29 [alert] 1175327#0: *82 open socket #6 left in connection 8
2024/01/05 22:02:29 [alert] 1175327#0: aborting
2024/01/05 22:03:21 [alert] 1175566#0: *7 open socket #27 left in connection 5
2024/01/05 22:03:21 [alert] 1175566#0: *11 open socket #20 left in connection 6
2024/01/05 22:03:21 [alert] 1175566#0: aborting
  1. Server logfile: ownCloud log (data/owncloud.log):
{"reqId":"e32adb40-6061-4daa-b7b2-6d70cf9cbfe3","level":4,"time":"2024-01-03T21:16:36+00:00","remoteAddr":"200.202.97.213","user":"HIDDEN_USER","app":"webdav","method":"MOVE","url":"\/remote.php\/dav\/uploads\/HIDDEN_USER\/2358551324\/.file","message":"Exception: HTTP\/1.1 400 The computed checksum does not match the one received from the client.: {\"Exception\":\"Sabre\\\\DAV\\\\Exception\\\\BadRequest\",\"Message\":\"The computed checksum does not match the one received from the client.\",\"Code\":0,\"Trace\":\"#0 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/apps\\\/dav\\\/lib\\\/Connector\\\/Sabre\\\/Directory.php(172): OCA\\\\DAV\\\\Connector\\\\Sabre\\\\File->put()\\n#1 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Tree.php(307): OCA\\\\DAV\\\\Connector\\\\Sabre\\\\Directory->createFile()\\n#2 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Tree.php(133): Sabre\\\\DAV\\\\Tree->copyNode()\\n#3 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/apps\\\/dav\\\/lib\\\/Tree.php(113): Sabre\\\\DAV\\\\Tree->copy()\\n#4 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Tree.php(163): OCA\\\\DAV\\\\Tree->copy()\\n#5 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/CorePlugin.php(612): Sabre\\\\DAV\\\\Tree->move()\\n#6 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/lib\\\/composer\\\/sabre\\\/event\\\/lib\\\/WildcardEmitterTrait.php(89): Sabre\\\\DAV\\\\CorePlugin->httpMove()\\n#7 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(472): Sabre\\\\DAV\\\\Server->emit()\\n#8 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(253): Sabre\\\\DAV\\\\Server->invokeMethod()\\n#9 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/apps\\\/dav\\\/lib\\\/Server.php(348): Sabre\\\\DAV\\\\Server->start()\\n#10 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/apps\\\/dav\\\/appinfo\\\/v2\\\/remote.php(31): OCA\\\\DAV\\\\Server->exec()\\n#11 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/remote.php(165): require_once('\\\/www\\\/wwwroot\\\/dr...')\\n#12 {main}\",\"File\":\"\\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/apps\\\/dav\\\/lib\\\/Connector\\\/Sabre\\\/File.php\",\"Line\":217}"}
{"reqId":"0ea940f4-6a8a-4e09-8e68-dabd012a5115","level":4,"time":"2024-01-03T22:19:02+00:00","remoteAddr":"200.202.97.213","user":"HIDDEN_USER","app":"webdav","method":"MOVE","url":"\/remote.php\/dav\/uploads\/HIDDEN_USER\/421841118\/.file","message":"Exception: HTTP\/1.1 400 The computed checksum does not match the one received from the client.: {\"Exception\":\"Sabre\\\\DAV\\\\Exception\\\\BadRequest\",\"Message\":\"The computed checksum does not match the one received from the client.\",\"Code\":0,\"Trace\":\"#0 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/apps\\\/dav\\\/lib\\\/Connector\\\/Sabre\\\/Directory.php(172): OCA\\\\DAV\\\\Connector\\\\Sabre\\\\File->put()\\n#1 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Tree.php(307): OCA\\\\DAV\\\\Connector\\\\Sabre\\\\Directory->createFile()\\n#2 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Tree.php(133): Sabre\\\\DAV\\\\Tree->copyNode()\\n#3 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/apps\\\/dav\\\/lib\\\/Tree.php(113): Sabre\\\\DAV\\\\Tree->copy()\\n#4 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Tree.php(163): OCA\\\\DAV\\\\Tree->copy()\\n#5 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/CorePlugin.php(612): Sabre\\\\DAV\\\\Tree->move()\\n#6 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/lib\\\/composer\\\/sabre\\\/event\\\/lib\\\/WildcardEmitterTrait.php(89): Sabre\\\\DAV\\\\CorePlugin->httpMove()\\n#7 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(472): Sabre\\\\DAV\\\\Server->emit()\\n#8 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(253): Sabre\\\\DAV\\\\Server->invokeMethod()\\n#9 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/apps\\\/dav\\\/lib\\\/Server.php(348): Sabre\\\\DAV\\\\Server->start()\\n#10 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/apps\\\/dav\\\/appinfo\\\/v2\\\/remote.php(31): OCA\\\\DAV\\\\Server->exec()\\n#11 \\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/remote.php(165): require_once('\\\/www\\\/wwwroot\\\/dr...')\\n#12 {main}\",\"File\":\"\\\/www\\\/wwwroot\\\/HIDDEN_DOMAIN\\\/apps\\\/dav\\\/lib\\\/Connector\\\/Sabre\\\/File.php\",\"Line\":217}"}
{"reqId":"j7TNeAGpsogvfhTJ18Cq","level":3,"time":"2024-01-04T10:12:35+00:00","remoteAddr":"54.89.229.39","user":"--","app":"OC\\Share20\\Manager","method":"GET","url":"\/index.php\/s\/ErSyVWNtUjfjQ82","message":"shared file not found by token: ErSyVWNtUjfjQ82 for federated user share, try to check federated group share."}
{"reqId":"j7TNeAGpsogvfhTJ18Cq","level":3,"time":"2024-01-04T10:12:35+00:00","remoteAddr":"54.89.229.39","user":"--","app":"OC\\Share20\\Manager","method":"GET","url":"\/index.php\/s\/ErSyVWNtUjfjQ82","message":"shared file not found by token: ErSyVWNtUjfjQ82 for federated group share"}
{"reqId":"b83a4dfd-312f-4132-a5c3-2d7191405a1d","level":3,"time":"2024-01-04T15:34:27+00:00","remoteAddr":"200.202.99.54","user":"HIDDEN_USER","app":"OC\\Share20\\Manager","method":"PROPFIND","url":"\/remote.php\/dav\/files\/HIDDEN_USER\/Base%20de%20conhecimento\/Hospedagem%20e%20Suporte\/Hosts\/DreamHost\/Guia%20b%C3%A1sico%20da%20DreamHost.mp4","message":"shared file not found by token: HIDDEN_USER for federated user share, try to check federated group share."}
{"reqId":"b83a4dfd-312f-4132-a5c3-2d7191405a1d","level":3,"time":"2024-01-04T15:34:27+00:00","remoteAddr":"200.202.99.54","user":"HIDDEN_USER","app":"OC\\Share20\\Manager","method":"PROPFIND","url":"\/remote.php\/dav\/files\/HIDDEN_USER\/Base%20de%20conhecimento\/Hospedagem%20e%20Suporte\/Hosts\/DreamHost\/Guia%20b%C3%A1sico%20da%20DreamHost.mp4","message":"shared file not found by token: HIDDEN_USER for federated group share"}
  1. NGINX conf (shortened):
http
	{
  #AAPANEL_FASTCGI_CONF_BEGIN
  fastcgi_cache_key "$scheme$request_method$host$request_uri";
  fastcgi_cache_path /dev/shm/nginx-cache/wp levels=1:2 keys_zone=WORDPRESS:100m inactive=60m max_size=1g;
  fastcgi_cache_use_stale error timeout invalid_header http_500;
  fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
  #AAPANEL_FASTCGI_CONF_END
  
        include       mime.types;
		#include luawaf.conf;

		include proxy.conf;

        default_type  application/octet-stream;

        server_names_hash_bucket_size 512;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 30g;

        sendfile   on;
        tcp_nopush on;

        keepalive_timeout 60;

        tcp_nodelay on;

        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 256k;
		fastcgi_intercept_errors on;

        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.1;
        gzip_comp_level 2;
        gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
        gzip_vary on;
        gzip_proxied   expired no-cache no-store private auth;
        gzip_disable   "MSIE [1-6]\.";

        limit_conn_zone $binary_remote_addr zone=perip:10m;
		limit_conn_zone $server_name zone=perserver:10m;

        server_tokens off;
        access_log off;

server
    {
        listen 888;
        server_name phpmyadmin;
        index index.html index.htm index.php;
        root  /www/server/phpmyadmin;

        #error_page   404   /404.html;
        include enable-php.conf;

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /\.
        {
            deny all;
        }

        access_log  /www/wwwlogs/access.log;
    }
include /www/server/panel/vhost/nginx/*.conf;
}