[prev in list] [next in list] [prev in thread] [next in thread]
List: apache-httpd-users-de
Subject: =?iso-8859-1?Q?Re:_Fehlerhafte_Datei=FCbertragung?=
From: Peter_Pöml <peter () poeml ! de>
Date: 2010-07-21 17:23:45
Message-ID: 73CCDC3D-3BD4-4464-B19F-1F1DF2BD2E40 () poeml ! de
[Download RAW message or body]
Hallo Ralph,
Am 16.07.2010 um 11:51 schrieb Ralph Ballier:
> Hallo,
>
> ich habe zum besseren Testen eine Modelldatei hergestellt, die aus 1024
> Zeilen der Form
>
> 012345670123456701234567012345670123456701234567012345670123456
>
> besteht. Dadurch entsteht eine Datei mit genau 65536 Zeichen (die Zeilen
> enden jedesmal bei 6 und nicht 7, weil der Zeilenwechsel \n als eigenes
> Zeichen zählt).
>
> Rufe ich jetzt
>
> strace -f -s 200000 -o proto ./httpd
>
> auf und lade die genannte Datei herunter, so kann ich in proto einigermaßen
> nachvollziehen, was geschieht.
>
> Nach gut 3000 Zeilen beginnt der Download der Datei.
> Es werden 8192 Zeichen gelesen:
>
> read(32, "0123...456\n", 8192) = 8192
>
> und wieder geschrieben:
>
> write(31, "0123...456\n", 8192) = 8192
>
> Das ganze vollzieht sich in dieser Form siebenmal. Beim achtenmal (dann
> wären ja die 65536 Zeichen vollständig übertragen worden) sieht das Ganze
> ein wenig anders aus:
>
> read(32, "0123...456\n", 8192) = 8192
>
> write(31, "0123...456\n", 8192) = 1
>
> Hier scheint also nur 1 Zeichen geschrieben worden zu sein. Die nachfolgende
> Zeile lautet:
>
> poll([{fd=31, events=POLLOUT, revents=POLLOUT}], 1, 300000) = 1
>
> Dann folgen offenbar die noch fehlenden Zeichen:
>
> write(31, "0123...456\n", 8191) = 8191
>
> Von ASCII-Nullen ist nichts zu sehen. Aber die übertragene Datei ist fast
> doppelt so lang, weil an ihr reguläres Ende ASCII-Nullen angehängt worden
> sind. wc a65536.pdf liefert
>
> 1024 1025 122879 a65536.pdf
>
> Soll ich noch mehr Inhalte der Protokolldatei posten?
>
> Gruß
>
> Ralph
Wenn ich Deine Beschreibung des strace-Logfiles richtig verstanden habe, geht daraus \
hervor, dass der Apache zu keinem Zeitpunkt die Nullen schreibt. Sprich, er kann dann \
nichts dafuer. Das Problem ist also an anderer Stelle zu suchen.
Der Apache schreibt korrekte Daten auf den Netzwerksocket, doch der schickt am \
anderen Ende nicht nur das raus, was er vom Apache bekommen hat, sondern mehr \
(eingestreute Nullen). Richtig?
Waehrend strace nachweist, dass die Nullen nicht gesendet werden sollten, muesste \
tcpdump nachweisen koennen, dass sie aber tatsaechlich aus dem anderen Ende des \
Netzwerkstacks rauskommen. (Muss ja. Wenn lynx/wget/curl nicht alle kaputt sind.)
Was ist es fuer ein Kernel, welche Version? Was ist sonst noch am Netzwerkverkehr \
beteiligt - irgendwelche Paketfilter? (Nicht, dass ich auf diese Informationen hin \
notwendigerweise mit einer Antwort dienlich sein kann, aber das sind nun mal die \
Rahmenbedingungen unter denen der Apache laeuft) Passiert es nur bei bestimmten \
Netzwerkinterfaces oder auch ueber Localhost?
Du schriebst, dass das Phaenomen von einem Tag auf den anderen auftrat, und nur auf \
Port 80, nicht aber auf Port 81. Zwei Dinge wuerde ich mir als moegliche Ursachen \
denken koennen. Entweder ein Paketfilter, der kaputt ist (moeglicherweise nach einer \
langen Zeit aufhoert korrekt zu arbeiten, nachdem irgendein Zaehler uebergelaufen \
ist), oder ein Kernel, der auf aehnliche Weise zu Bruch geht. In beiden Faellen \
koennte das Problem nach einem Reboot "behoben", oder vielmehr verschwunden sein. Und \
da ist es dann immer schade, wenn's weg ist, bevor man es moeglichst genau \
lokalisiert hat - denn unter Umstaenden bekommt man nicht so oft die Chance dazu.
Peter
--------------------------------------------------------------------------
Apache HTTP Server Mailing List "users-de"
unsubscribe-Anfragen an users-de-unsubscribe@httpd.apache.org
sonstige Anfragen an users-de-help@httpd.apache.org
--------------------------------------------------------------------------
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic