web-dev-qa-db-ja.com

何千ものファイルを転送すると、MicrosoftFTPサーバーへの接続がハングする

何千ものファイルをFTPサーバーに転送すると、一部のftpクライアントが完了できないことがわかりました。 mput *コマンドは数時間実行された後、ハングします

150 Opening BINARY mode data connection.

FTPサーバー管理者に連絡する簡単な方法がありません(私が持っているのはWeHostWebSites.Comによって管理されているブロック内のIPアドレスだけであり、このIPは多数のドメイン名で共有されていることを知っています)。

FTPサーバーは自己紹介します

220 Microsoft FTP Service

だから私はそれがIISだと思います。

何千ものファイルを含むディレクトリでmput *を実行しています。転送がしばらくハングするまで、非アクティブのために制御接続が閉じられるまで。

ログを調べると、次のパターンが見られます。最初、ファイルはパッシブモードで転送されます。

229 Entering Extended Passive Mode (|||53567|)
150 Opening BINARY mode data connection.

次に、ポート番号は65200に達するまで増加します。この時点で、サーバーは501を返します。

229 Entering Extended Passive Mode (|||65201|)
501 Server cannot accept argument.

これにより、lukemftp(OpenSUSE 11のインストールにデフォルトで付属)やFARマネージャーのFTPプラグイン(Windowsユーザーに人気)などのクライアントがactiveしたがって、次の転送はPORTコマンドで始まります。

200 PORT command successful.
150 Opening BINARY mode data connection.

netstat -tは、新しい接続がサーバーのポート20/tcpに接続されることも示しています。別の3000以上のファイルを転送した後、コマンドがハングします。この時点で、netstat -tからの出力は、TIME_WAIT接続がどのように排出され、非アクティブのために制御接続が閉じられるかを示しています。

回避策:大規模なFTP転送にはlftpを使用することがしばしば提案され、これが問題を回避する方法であることが証明されました。 100000以上のファイルがあるディレクトリでlftpmirror -Rコマンドを実行するのを見ると、動的ポート番号が65200まで実行され、49152から続行してすべての転送をパッシブに保つことがわかります。したがって、このコマンドは正常に完了します。

lftpを使用せずにこの問題を回避する方法はありますか(特に、lftpを持たない純粋なWindowsクライアントで何ができるでしょうか?

通知:この質問は数か月前に http://serverfault.com に投稿されましたが、回答がなく、最近の投票。 ServerFaultから削除し、代わりにSuperUserに再投稿することにしました。

1
Dmitri Chubarov

ありますか on access antivirus-softwareまたはcontinous backup softwareサーバー上?たぶん、テスト目的でそれを無効にすると、何かが変わります。

次のプロセスを考えてください。

  1. ftpクライアントからサーバーへのputファイル
  2. サーバーが一時ファイルへのストリームを開きます
  3. ウイルス対策ソフトウェアまたはバックアップソフトウェアは、スキャンまたはバックアップのために(一時)ファイルをロックします
  4. 一時ファイルをスキャンしている間、ftpサーバーは完成したファイルを最終的な場所と名前にmoveしたいと考えています
  5. この時点でファイルがロックされているため、最終操作が失敗してエラーがスローされる可能性があります。
1
Martin Seitl