Collector前回のsnmpによるシステム監視でメモリとスワップメモリを使い果たしてハングアップすることがわかりました。思い当たることは自ら作ったPythonスクリプトです。理屈上は定義した変数以外はないのでメモリの消費は一定のはずですが実際はどんどん増えて使い切ってしまう現象に陥りました。いままで何事もなく動いていたので何か原因があるはずです。数千行のコードを調べるのは時間の無駄なので別の方法を調べてみました。検索するとPythonにガーベッジコレクションの機能があり、検索で実例をみて当てはめてみました。Pythonでループしていると起こり得るケースです。gcでモジュールを読みこみループ上にgc.collect()を配置します。Pythonのドキュメントを見るとgc.enable()という機能があり、自動的にメモリを開放してくれるそうですが今回は適用しません。追記:gc.collect()を使うと50%程度とかなり遅くなることが分かりました。シュミレーションで使う場合はgc.enable()を使ったほうが良さそうです。アプリケーションを整理したらCactiが正常に動くようになりました。追記2まだPythonのバグがFIXできなかったのでデバッグをしてみました。検索すると何件かヒットしたので最初のひとつを挑戦してみました。3585...tupleが増えてることが分かります。tupleはあまり使っててないでたぶんモジュールかなとか推測できますがそれ以上進めません。次にtracemallocを使った方法で挑戦してみました。KiBに増えていることがわかります。このプログラムを続けていると一定の割合で増加していきます。そこでonnection_cext.pyをエディタで開いてみました。self._cmysql.fetch_row()とあります。CMySQLConnection()内に定義された関数です。ループでクラスで定義されたオブジェクトを消去せずオブジェクトを追加していったように推測できます。Googleで検索してみるとSELECT分はメモリに残るというようなコメントも見受けられます。なるとmysql-connector-pythonを編集するとなると手に負えないので、ほかpythonでMySQLが使えるモジュールを探してみてPyMySQLをインストールしてみました。違いはmysql-connector-pythonはリストで返しますがPyMySQLはdict形式で返します。mysql-connector-pythonに比べて半分くらいパーフォーマンスが落ちます。PyMySQLでプログラムを直してデバッグしてみます。Bconnections.py:1209とcursors.py:407に若干増加が見られる程度となりました。これでしばらく様子見ようと思います。参考:https://docs.python.org/3/library/gc.html#gc.enablehttps://dev.mysql.com/doc/connector-python/en/connector-python-installation-binary.htmlhttp://tech.labs.oliverwyman.com/blog/2008/11/14/tracing-python-memory-leaks/https://docs.python.org/3/library/pdb.htmlhttps://mg.pov.lt/objgraph/https://qiita.com/mitch0807/items/f9f6efd4e65a022a8ab9https://pymysql.readthedocs.io/en/latest/user/installation.htmlSNMPをインストールする最近、VPSの調子が悪くハングアップすることが1週間ごと起きました。CPUの負荷状況を確認できるのでそれで判断するしかありません。手の施しようのなくなるまえに何か手を打っておく方法といえばSNMPでシステムを監視することです。それでは早速インストールしてみます。snmpとかnet-snmpとかディストリビューションによって呼び方が異なりますが、基本は同じものです。Ubuntuやデビアンのインストールは次のようにします。snmpd出力時に理解しやすいように次の行をコメントアウトします。udp:161を使うのでファイヤーウォールの設定も必要です。0...ディスク情報は読み解くのが難しいですね。CPU負荷平均のlaTableとメモリのmemoryだけを見ておけばよいでしょう。Suspend最近ラップトップPCをサーバとして使うようにしてみました。使っていないときは電力の節約のためサスペンドしていますが、どうも毎回数m離れたところまで行っては操作するのが面倒になったので、メインPCからサスペンドしてみました。したことでも億劫になるナマケモノみたいになってますが、極力動かないで済むことに越したことないのでセットアップしてみました。LANが使えるようにBIOSをセットしておきます。pm-suspendを実行します。ブートまたは電源ON:wakeonlanをインストールします。[HWアドレス]を実行します。dm-cryptでrootパーティションを暗号化している場合、過去の記事を参考に設定します。clientを使って暗号化されたリモートサーバのロック解除方法Ubuntu(18.04TLS)でssh経由でdm-cryptの解除する場合、debianと少し異なります。authorized_keys/etc/crypttabがないとdropbearはインストールされません。/etc/crypttabinitramfsをアップデートします。-uおまけ:LinuxのGrubをアップデートするとmacOSのブートローダより先に起動するようになります。毎回訂正するのは面倒なのでGrubからCloverを立ち上げる設定をします。EFIのUUIDを調べてgurbの設定ファイルに書き込みます。/EFI/CLOVER/CLOVERX64.efi}Grubを更新します。pootlepress.。