数週間前、Windows XP環境でいくつかのFTPコマンドをテストするための簡単なRubyスクリプトを書きました。すべてが予想どおりに機能していて、コードを実行するのに時間がかかっていないこともわかっていました(私は最大で3〜4秒でしょう)。Windows XPでRuby FTPが極端に遅い
数日前、私が開発しているアプリケーションは非常にゆっくりと動作し始めました。私が問題を調査したとき、私はFTPコマンドに問題を切り分けました。私は今元のテストスクリプトを再実行し、実行するには分を2回以上引き継ぎます。コマンドラインFTPは本質的に瞬間的です。
rubyディレクトリ構造のファイルが変更されていません。私は、新しいアプリケーションがインストールされたとは思わない - 確かに他のアプリケーションは動作していないようだ。
誰でも次のコードが遅く実行される理由をお聞かせください。 print
ステートメントの間隔を手動で調整すると、nlst
とls
のそれぞれに約65秒かかることがわかります。プロファイラは、nlst
の場合は16、ls
の場合は31の合計16 ms/callと考えられます。
require 'net/ftp'
Net::FTP.open("ip_redacted", "user_redacted", "password_redacted") do |ftp|
ftp.chdir("dir_redacted")
files = ftp.nlst
print "files = #{files.sort!}\n"
list = ftp.ls
print "list = #{list}\n"
file = "filename_redacted"
size = ftp.size(file)
print "size = #{size}\n"
end
ルータの背後にいますか? –
これは興味深い質問です。 2台のマシンはローカルネットワーク上にあります。一方から他方へのtracertは、そのネットワーク内で2つのホップを示します。 tracertは、すべてのホップが<1ミリ秒であることを示しますが、tracert自体には1分ほどの時間がかかります。コマンドラインFTPは、RubyからのFTPと同じ遅延を表示しないことに注意してください。 –