QFtp und ProFTPd -> Server-Kernel bringt out_of_memory

Alles rund um die Programmierung mit Qt
Antworten
thereapman
Beiträge: 36
Registriert: 6. Juni 2007 15:39

QFtp und ProFTPd -> Server-Kernel bringt out_of_memory

Beitrag von thereapman »

Hi Leute!

Ich hab entweder n verständnissproblem oder bin an grenzen von Qt gestossen.

Folgendes:
Ich will aus einer grossen Datei (4GB) am Clienten (mein Qt-Programm) 10 kleine häppchen machen und diese als einzelne Dateien auf den FTP-Server hochladen welcher ein ProFTPd ist. beide Systeme sind Linux und mit jeweils 4GB RAM und ebensoviel Swap gesegnet.

wenn ich nun den code unten laufen lasse, werden die ersten chunks korrekt hochgeladen 2 oder3, bis der Server dann eine kernel "out-of-memory" bekommt und wild prozesse abschiesst.

Interessant ist auch:
Ich habe eine Progressbar im GUI mit dataTransferProgress() verbunden. wie aber immer nur bis 33% läuft und dann der nächste upload startet. Die Datei aber komplett am FTP-Server ankommt. maximum wird bei jedem aufruf neu gesetzt gefolgt von processEvents.

Kann der QFtp nicht mit grossen Dateien umgehen, oder hab ich nen denkfehler im Code?

Code: Alles auswählen

	for(int i = 0; i < chunks; i++)
	{
		//Connect FTP
		uploader->connectToHost(ftp_host,ftp_port);
		uploader->login(ftp_user,ftp_pass);
		uploader->cd(ftp_path);
		uploader->cd("tcc-"+taskname);

		while(uploader->currentId() != 0)
		{
			QApplication::processEvents();
		}


		QApplication::processEvents();
		QString chunk_name = QString("%1-%2.chunk").arg(taskname,QString::number(i));
		qDebug() << "Writing out Chunk #" << i << " from source to file " << chunk_name;

		QByteArray *buffer = new QByteArray();
		*buffer = source.read(chunksize);
		uploader->put(*buffer,chunk_name);

		delete buffer;

		//Reset FTP Connection
		uploader->close();

	}
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

1. Man muß nicht alles in eine Methode packen
2. Schon mal was von Signal/Slots gehört?
3. Man kommt in der Regel ohne processEvents aus.
4. Schon mal überprüft wo dein Speicher hinkommt?
Antworten