やたら重い?

  • 2012.11.28 Wednesday
  • 12:39

ファイル共有しているパソコンからファイルをコピーしようとしたら、

メモリが足りない

「メモリーが足りません」なるエラー

他のファイルはコピーしても問題ないのに・・・いやたまに出るな。

とりあえず、再試行しまくるとコピーが完了できる。

こちら側の問題?
ということで、他のパソコンからもやってみると、やはり同様のエラー多発

調べてみると、どうやらファイルの文字制限(255文字以内)で死んでいるらしい。

xcopyで「メモリが足りません」 

確かに階層奥深くなので(しかも途中日本語名のフォルダが多い)あり得る話。

ということで、直下に置いてみるが・・・
やはりエラーが出てしまう。

これは、共有元のパソコンにある。
ということで、共有しているパソコンを見ると、メモリーが異常にリークしている。

empty.exeを試してみるが、全く解放されない。
リークしているプログラムを見ると、どうやら SearchIndexer.exe のようだ

SearchIndexer.exeで検索するとやはり同様に重たい動きをしている方がいらっしゃるようで、

PCが重い:SearchIndexer.exeを止めてみる
※上記記事はXPですが、Vista、7以降でも同様に止めることができます。

サービスの停止をすれば止められるということで、やってみる。


で、1ヶ月ほど様子を見ていましたが、今のところリークしている気配はなさそうです

 
追記150918
ファイルを大量に作成する(1秒に1000とかそれ以上)プログラムを作っていて、
実際に導入するサーバーでプログラムで走らせていたところ、やたらメモリがリークする。
empty.exeをやっても全く減ることはない。

そもそもempty自体がWin Server 2003のものなので、実際に働いているのかも分からない。
クリアできるものはクリアできるが、根本原因まで削除してくれないと感じる。
(実際のところプロセスメモリは消せても、不要になったページプールなどは手動では消せない)

で、調べていたら、Rammapツールというのを使ってちゃんと詳細を見なさいということで、
使ってみることにした。

Rammapツールでメモリの詳細な利用状況を調査する

まず、RammapをMSサイトから落としてきて起動してみると、
Mapped Fileにstandbyの状態で残留しているファイル(いっぱい作ったファイル)があることが分かった。

これはRAIDを組んでいるせいで、書き込みに時間がかかってずっとキャッシュされている?
(自分のPCでも起きているのでRAIDとの関係はなさそう)

もしくは、プログラム側の問題で開きっぱなし?
(一応、ちゃんと開いたら閉じている(Disposeも)しているし、
 プログラム自体ピークで300MBとか行くがアイドリング時は20MBとかなので、そんなには問題はなさそうなのだが・・・)

それとも、Windows Server 2012のせい?
(こちらも開発環境(Win7)でも同じ現象があるので、OSとは言い切れない)

まぁ、プログラム側の問題として修正をしていかないと行けないところだが、

それはそれで、どうにかこの貯まりまくったstandbyなマップファイルのキャッシュを消したいと思って、
ツールの上を見るとemptyというメニューがあるのに気がつく。

その中のEmpty Standby Listを試しに実行すると、
emptyでも開放できなかったメモリがみるみるうちに激減してスッキリ!

emptyより効果抜群です。
といっても一時しのぎでメモリリークを消したいという感じで使ったので、安全性は分かりません。

メモリをクリアしている間にプログラムの修正案を考えないと〜〜〜。


ちなみに、Working Sets を Empty しても一瞬は減りはするものの(たぶんempty.exeと同じようなコマンド?)、
すぐに元に戻ってしまいました。
他のEmptyもあまり効果はなく、 Standbyだけガッツリ減ったので、スタンバイがらみであるのは間違いないかなと思っています。

それと、スタンドバイ以外でアクティブでリークしているのはPaged Poolですね。
Empty Standbyするとこれもガッツリ消してくれましたので、
この辺にMapped Fileのスタンドバイが書き込まれていたりするのかも?

詳しいことはもっと他のツールを使ってみないと分かりませんが、
今回はとりあえず一時的に解放するempty.exeの変わりになりそうなツールということで。
 
追記150922
このツールを使いながら、作成したプログラムの何が原因かいろいろ考えていましたが、

兎にも角にも、リソースモニター(タスクのパフォーマンス)で見る限りでは、
キャッシュのスタンバイに大量にあるのは間違いなし。

そのスタンバイには大量に作ったファイルがキャッシュされているらしいということまでは確認できた。

さて、そこから先の原因を考えていたのだが、
たまたま何となく保存されたファイル(スタンバイになっているファイル)を一気に消してみたら・・・

あれれれれ〜〜〜
見る見る間にリークしているメモリが減っていく〜〜〜。

しかも、Rammapのスタンバイにあったファイルもごっそり消えている。

なんてことですか、どうやら大量に作ったファイル自体がメモリリークの原因で、
それを消すことで解消されるとは・・・。

なんだかよく分かりませんが、ファイル自体がページングの代わりみたいなことになっていて、
それがずっとキャッシュに残っていたような感じです。
うーん、解決したけど納得いかないなぁ。

とりあえず、大量にファイルを作ったらそのファイルを消してみるとメモリリーク(? ページング?)が解消されるかも。
 


参考URL
xcopyで「メモリが足りません」 
最強安全メモリ開放ソフト - マイクロソフト(empty.exe)
PCが重い:SearchIndexer.exeを止めてみる

Rammapツールでメモリの詳細な利用状況を調査する
RAMMapツール

 
コメント
コメントする








    
この記事のトラックバックURL
トラックバック

calendar

S M T W T F S
   1234
567891011
12131415161718
19202122232425
262728293031 
<< March 2017 >>

search this site.

よく使う、検索される投稿

categories

アマゾン

楽天

selected entries

archives

recent comment

recent trackback

profile


※当ブログはリンクフリーですが、 取材や雑誌等で掲載される場合は、事前にお知らせください

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM