質問: p.communicate() print('i: {} out: {}\n'.format(i,out.decode())) p.terminate() ``` ### 試したこと この問題は,Spyder,JupyterNotebook,Anaconda Promptのうちどれを使用しても発生しました.※上記のメモリ増加率はAnaconda Promptのときのものです. 調べた情報の中には,shell=Trueだとプロセスを終了できなくなった,という内容[1]がありましたが,今回はshell=Falseで発生しています. [1] How to terminate a python subprocess launched with shell=True, https://stackoverflow.com/questions/4789837/how-to-terminate-a-python-subprocess-launched-with-shell-true, ※2020/4/14に閲覧 ### 補足情報(FW/ツールのバージョンなど) Pythonのバージョンは 3.7.4,condaのバージョンは 4.7.12 です. 2020/4/15 追記 Ubuntu 18.04にAnacondaをインストールし,再起動後このプログラムを動かした場合,このメモリが開放されない問題は発生しませんでした.なので,Windows10でのみ起きるものと推測されます.(CPU A10-7800 メモリ12GB,python 3.7.6,conda 4.8.2) 2020/4/15 追記 Windows10でこのプログラムを2回実行した際のリソースモニターを含めたスクリーンショット(※画面左のショートカット部分はカットしています)はこちらです. ※実行しているmemory_explosion.pyの中身が上記コードです. リソースモニターでコミット順に並べた際にはバックグラウンドで動いているskype,steamなどが上位に来ますが,何か莫大にメモリを消費しているプロセスは見当たりません.このときは1回目終了時57%→2回目終了時88%となっています.ls.exeは実行中は下の方に現れますが,終了後は無くなります.しかし,メモリは消費されたままです. ![Window10で2回実行した後のスクリーンショット](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/741248a70261d24f0e17691782a1c07e.png) 2020/4/15 追記 上で示したスクリーンショットでは,ワーキングセットを見ていなかったため,再度2回実行した際に,ワーキングセットでソートしたものを示します. ![Windows10で2回実行した後のスクリーンショット(ワーキングセット)](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/6425a33187ab21a4d34cb62fa61a0fa4.png) 2020/4/15 追記 ノートPCのWindows10でこのプログラムを実行したところ,メモリの開放に不具合は起きませんでした. 実行環境:CPU i7-8550U,メモリ 16GB, Python 3.7.6,conda 4.8.2 Windows10で,というよりはハードウェア構成から起因している問題の可能性も出てきました. 2020/4/16 追記 AnacondaとPythonのバージョン違いが原因かもしれないので,メインPCの環境を更新して実行しました. 実行中,じわじわとメモリ使用率が増えていき,1回実行前後では物理メモリ使用率は35%→65%となり,終了後も変化しないため,バージョンが古いという点は問題ではありませんでした. 実行環境:CPU Ryzen 7 3700X,メモリ16GB,Python 3.7.7,conda 4.8.3 2020/4/16 追記 RAMMapを使用して,開始前(メモリ使用率33%),1回目終了時(メモリ使用率65%),2回目終了時(メモリ使用率94%)の各時点で更新し,内容を見ました. Page Tableが実行するごとに約2.7GB増加しているほか,Unusedなのにアクティブなメモリというものが増加しています.Diver Lockedにはほぼ変化はありませんでした. ![RAMMap実行結果](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/df9cf917456d334cca8a60a5a9afaba6.png) 2020/4/16 追記 リソースモニターでは,終了後ls.exeは消えていきましたが,RAMMapを終了後に起動してProcesesを見ると,ls.exeは大量に残っていました.これらのls.exeがPage Table分のメモリを保持したままになっているようです. また,セーフモードで起動してプログラムを実行した場合,メモリ解放の問題は発生せず使用率は10%台のままでした. ![ls.exeが残っている](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/229d22ff79ab3bba06b85cb49dee8da3.png)
回答: 本日,メインで使用していたPCのWindows10を入れていたSSDが壊れたため,HDDにWindows10をクリーンインストールした後で再度試すと,メモリ解放の問題は発生しませんでした. (※実行するプログラムをlsからdirに変えたりなどの変更あり,Python 3.7.6,conda 4.8.2) 元の環境が失われてしまったので,質問を閉じさせていただきます. 何らかのドライバによる影響もしくはSSD不調の影響でメモリが解放されない状況が起きる場合があり, クリーンインストールもしくは不調なSSDを外したことでそれが解決した,ということになります. 検証方法などでアドバイスをいただき,ありがとうございました.