220 万件のレコードに関するデータを処理するプログラムを作成しました。レコードごとに、合計で約 0.01 秒かかる一連の 20 回の計算を通過します。より高速に実行するために、私は Python マルチプロセスを使用し、データを一般的に 6 つのブロックに分割し、ペイロードをプロセスに配布して実行を調整するマスター プロセスと並行して実行します。ところで、計算の結果、プログラムは約 2200 万のレコードをデータベースに書き込みます。
Python 3.2.2で実行されている8GB RAMを搭載したMacBookPro i7 2.2GHzでこれを実行しています。データはローカルの MySQL サーバーにあります。
プログラムは順調に起動します。予測可能な方法で実行され、CPU の使用率は平均 60 ~ 70% で、Macbook Pro はオーブンのように熱くなります。その後、約 5 時間実行すると速度が低下し、各コアの CPU 使用率が平均 20% に低下します。- 各 Python プロセスは、約 480 MB の実 RAM と約 850 MB の仮想 RAM を消費しています。これらの重いプロセスは全部で 6 つあり、OSX が消費する仮想メモリの合計 (アクティビティ モニターで表示) は約 300GB です。
パフォーマンスの低下は、大量のメモリ消費と潜在的に高いページ スワップが原因であると思われます。
これらの症状をより適切に診断するにはどうすればよいですか? 大規模なメモリ内オブジェクトを長時間実行している Python に問題はありますか? 実際、今日のテクノロジーにとって 6 時間実行することは重荷ではないと思いますが、私は Python の経験が半年ほどしかないので、何を知っているのでしょうか?!
ありがとう!