2

サーバーごとに1分に1回、複数のWebサーバーにクエリを実行するPythonアプリケーションを作成しています。アプリケーションは数分間正常に実行され、その後、すべてのサーバーが次のエラーで応答を開始します。

次のcURLエラーが発生しました:要求されたURLがエラーを返しました:400 Bad Request

これが発生すると、発信帯域幅ペグと両方のCPUコアが80%を超えて動作していることがわかります(このマシンの負荷は通常非常に軽いです)。ただし、メモリ使用量には大きな影響はありません。

特定のアプリケーションから送信されたすべてのリクエストのリクエスト全体をキャプチャする方法はありますか?または、Pythonでリクエスト全体をキャプチャして、デバッグ目的で出力することはできますか?サーバーにクエリを実行するコードの一部は次のとおりです。

output = cStringIO.StringIO()
c = pycurl.Curl()
c.setopt(c.URL, url)
c.setopt(c.USERAGENT, 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0')
c.setopt(c.WRITEFUNCTION, output.write)
c.setopt(c.CONNECTTIMEOUT, 10) 
c.setopt(c.TIMEOUT, 15) 
c.setopt(c.FAILONERROR, True)
c.setopt(c.NOSIGNAL, 1)

try:
    c.perform()
    toReturn = output.getvalue()
    output.close()
    return toReturn

except pycurl.error, error:
    errno, errstr = error
    print 'The following cURL error occurred: ', errstr

このマシンは、Kubuntu12.10とPython2.7を実行する6GiBRAMを搭載したデュアルコア2.0GHzIntelボックスです。すべてがVIMでコード化されているため、偽のIDEコードが暴走することはありません。

4

1 に答える 1

1

特定のアプリケーションから送信されたすべてのリクエストのリクエスト全体をキャプチャする方法はありますか?

アプリケーションから送信されたリクエストを含む、すべての着信/発信トラフィックをキャプチャして監視する最も簡単な方法は、wiresharkを使用することです。

または、Pythonでリクエスト全体をキャプチャして、デバッグ目的で出力することはできますか?

次のデバッグオプションを追加して、curlがリクエストに関する有用な情報を出力できるようにすることができます。

c.setopt(pycurl.VERBOSE、1)

于 2013-01-04T13:34:08.457 に答える