Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Please help: Download file from server using HTTP/2 protocol consumes too much RAM
QtWS25 Last Chance

Please help: Download file from server using HTTP/2 protocol consumes too much RAM

Scheduled Pinned Locked Moved Unsolved General and Desktop
12 Posts 4 Posters 672 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Offline
    K Offline
    kto_
    wrote on 5 Jun 2021, 10:28 last edited by kto_ 6 May 2021, 10:42
    #1

    Hi everyone,
    I'm facing a very headache problem.
    I use Qt 5.9.6 to write a simple program to download file from server which is using HTTP/2 protocol.
    I observe that my program consumes amount of RAM same as the downloaded file size. If I download file 1GB then my RAM will increase gradually to 1GB and will be released when downloading finishes.

    This issue does not occur if I download file from server using HTTP/1.1 protocol.

    Here is my code:

        QNetworkAccessManager qnam;
        QNetworkReply *rep;
    
        // Open file to write downloaded data
        QFile file("C:\\Download\\downloaded.data");
        if (!file.open(QIODevice::WriteOnly)) {
            return;
        }
    
        // This server uses http/2 protocol
        QUrl url(QStringLiteral("https://nodejs.org/dist/v16.2.0/node-v16.2.0.tar.gz"));
    
        QNetworkRequest req(url);
        // Enable http/2 protocol for request.
        // If you download from server using http/1.1 please comment this line
        req.setAttribute(QNetworkRequest::HTTP2AllowedAttribute, true);
    
        // Start to download
        rep = qnam.get(req);
    
        // Connect signals
        QObject::connect(rep, &QNetworkReply::finished, [&](){
            // Download finished, stop event loop
            evtloop.exit();
        });
        QObject::connect(rep, &QNetworkReply::sslErrors, [&](const QList<QSslError> &errors){
            qDebug() << errors;
        });
        QObject::connect(rep, &QNetworkReply::readyRead, [&](){
            // Write data to file
            file.write(rep->readAll());
        });
    
        // Start event loop
        evtloop.exec();
        
        // Close file and delete NetworkReply pointer
        file.close();
        rep->deleteLater();
    

    There're some reasons prevent me from upgrading to Qt's newer version so currently I'm still using Qt 5.9.6.

    Please help me, I appreciate any help from you all.

    1 Reply Last reply
    0
    • C Offline
      C Offline
      Christian Ehrlicher
      Lifetime Qt Champion
      wrote on 5 Jun 2021, 10:54 last edited by
      #2
      This post is deleted!
      1 Reply Last reply
      0
      • S Offline
        S Offline
        SGaist
        Lifetime Qt Champion
        wrote on 5 Jun 2021, 11:58 last edited by
        #3

        Hi and welcome to devnet,

        Since QNetworkReply is a QIODevice, why not use readyRead and read the data as they arrive ?

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        K 1 Reply Last reply 5 Jun 2021, 12:29
        0
        • S SGaist
          5 Jun 2021, 11:58

          Hi and welcome to devnet,

          Since QNetworkReply is a QIODevice, why not use readyRead and read the data as they arrive ?

          K Offline
          K Offline
          kto_
          wrote on 5 Jun 2021, 12:29 last edited by
          #4

          Hi @SGaist
          Yes, I do use readyRead signal to read data when they arrive. You can check my code above

          QObject::connect(rep, &QNetworkReply::readyRead, [&](){
                  // Write data to file
                  file.write(rep->readAll());
              });
          
          1 Reply Last reply
          0
          • S Offline
            S Offline
            SGaist
            Lifetime Qt Champion
            wrote on 5 Jun 2021, 19:16 last edited by
            #5

            My bad, the code rendering is sometime tricky.

            Even if locked with 5.9.6, can you check if it works better with a more recent version of Qt ?

            Interested in AI ? www.idiap.ch
            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

            K 1 Reply Last reply 6 Jun 2021, 07:16
            0
            • S SGaist
              5 Jun 2021, 19:16

              My bad, the code rendering is sometime tricky.

              Even if locked with 5.9.6, can you check if it works better with a more recent version of Qt ?

              K Offline
              K Offline
              kto_
              wrote on 6 Jun 2021, 07:16 last edited by
              #6

              Since all my projects are using Qt 5.9.6 so I cannot upgrade to newer version now (it will take time to make everything works fine with recent Qt version).
              I wonder if we have a solution for this (or root cause is ok)

              1 Reply Last reply
              0
              • S Offline
                S Offline
                SGaist
                Lifetime Qt Champion
                wrote on 6 Jun 2021, 07:23 last edited by
                #7

                The fact that you are locked to 5.9.6 is well understood, my suggestion is to check whether it's still the case with a more recent version of Qt and if it's the case, you might be able to backport said fix. You do not need to re-build your whole application, just make a minimal app that does the download to observe the effect.

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                1
                • K Offline
                  K Offline
                  kto_
                  wrote on 6 Jun 2021, 23:46 last edited by
                  #8

                  Got it, let me try.
                  Thanks a lot for your help.

                  1 Reply Last reply
                  0
                  • K Offline
                    K Offline
                    kto_
                    wrote on 7 Jun 2021, 04:55 last edited by
                    #9
                    This post is deleted!
                    1 Reply Last reply
                    1
                    • C Offline
                      C Offline
                      Christian Ehrlicher
                      Lifetime Qt Champion
                      wrote on 7 Jun 2021, 04:58 last edited by
                      #10

                      It still would be nice if you can try to reproduce it with 5.15.x and if it still happens without you start/endTransaction() stuff, create a bug report so it gets fixed. I don't have a http/2 server for testing here so can't try it out by myself.

                      1 Reply Last reply
                      1
                      • K Offline
                        K Offline
                        kto_
                        wrote on 7 Jun 2021, 07:05 last edited by
                        #11

                        Sorry I forgot to enable HTTP/2. I re-checked again and RAM is still increased.
                        You can test by downloading file from here:
                        https://download-installer.cdn.mozilla.net/pub/firefox/releases/89.0/linux-x86_64/en-US/firefox-89.0.tar.bz2
                        This server is using HTTP/2 protocol.

                        1 Reply Last reply
                        0
                        • T Offline
                          T Offline
                          Thuong Le
                          wrote on 13 Jul 2021, 03:53 last edited by Thuong Le
                          #12

                          I've tried with 5.12 and the problem is not happening. Maybe it is a bug of 5.9.6

                          1 Reply Last reply
                          0

                          • Login

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • Users
                          • Groups
                          • Search
                          • Get Qt Extensions
                          • Unsolved