Monthly Archives: March 2019

PythonのGarbage Collector

前回のsnmpによるシステム監視でメモリとスワップメモリを使い果たしてハングアップすることがわかりました。思い当たることは自ら作ったPythonスクリプトです。理屈上は定義した変数以外はないのでメモリの消費は一定のはずですが実際はどんどん増えて使い切ってしまう現象に陥りました。いままで何事もなく動いていたので何か原因があるはずです。しかしながら数千行のコードを調べるのは時間の無駄なので別の方法を調べてみました。検索するとPythonにガーベッジコレクションの機能があり、検索で実例をみて当てはめてみました。やはりPythonでループしていると起こり得るケースです。import gcでモジュールを読みこみループ上にgc.collect()を配置します。Pythonのドキュメントを見るとgc.enable()という機能があり、自動的にメモリを開放してくれるそうですが今回は適用しません。 追記: gc.collect()を使うと50%程度とかなり遅くなることが分かりました。シュミレーションで使う場合はgc.enable()を使ったほうが良さそうです。いろいろアプリケーションを整理したらCactiが正常に動くようになりました。   追記2 まだPythonのバグがFIXできなかったのでデバッグをしてみました。検索すると何件かヒットしたので最初のひとつを挑戦してみました。 pip install objgraph python3 -m pdb ./{program}.py (Pdb) continue CTRL+C (Pdb) import objgraph (Pdb) objgraph.show_most_common_types(limit=20) function 18919 tuple 8785 dict 7327 weakref 4017 builtin_function_or_method 3585 … (Pdb) continue CTRL+C (Pdb) import objgraph (Pdb) … Continue reading

Posted in python | Comments Off on PythonのGarbage Collector

SNMPをインストールする

最近、VPSの調子が悪くハングアップすることが1週間ごと起きました。原因は調べようがないので分かりませんがVPSのダッシュボードでNetworkとDisc IO とCPUの負荷状況を確認できるのでそれで判断するしかありません。しかし手の施しようのなくなるまえに何か手を打っておく方法といえばSNMPでシステムを監視することです。それでは早速インストールしてみます。snmpとかnet-snmpとかディストリビューションによって呼び方が異なりますが、基本は同じものです。Ubuntuやデビアンのインストールは次のようにします。 apt-get install snmp snmp-mibs-downloader snmpd 出力時に理解しやすいように次の行をコメントアウトします。またudp:161を使うのでファイヤーウォールの設定も必要です。 /etc/snmp/snmp.conf #mibs : /etc/snmp/snmpd.conf agentAddress udp:161,udp6:[::1]:161 # 基本のシステム情報 rocommunity public default -V systemonly # すべての情報 rocommunity public default 出力例:(※注:VPN等で接続します) snmpwalk -v1 {VPS IP} -c public UCD-SNMP-MIB::laTable UCD-SNMP-MIB::laIndex.1 = INTEGER: 1 UCD-SNMP-MIB::laIndex.2 … Continue reading

Posted in snmp | Comments Off on SNMPをインストールする

リモートPCのBoot & Suspend

最近ラップトップPCをサーバとして使うようにしてみました。使っていないときは電力の節約のためサスペンドしていますが、どうも毎回数m離れたところまで行っては操作するのが面倒になったので、メインPCからサスペンドしてみました。ちょっとしたことでも億劫になるナマケモノみたいになってますが、極力動かないで済むことに越したことないのでセットアップしてみました。ラップトップはwake-on LANが使えるようにBIOSをセットしておきます。 サスペンド: sshでログインしてsudo pm-suspendを実行します。 ブートまたは電源ON: wakeonlanをインストールします。 wakeonlan [HWアドレス]を実行します。 dm-cryptでrootパーティションを暗号化している場合、過去の記事を参考に設定します。 Debian: ssh clientを使って暗号化されたリモートサーバのロック解除方法 Ubuntu(18.04TLS)でssh経由でdm-cryptの解除する場合、debianと少し異なります。 パッケージ apt install busybox-initramfs dropbear-initramfs cp -a /usr/share/initramfs-tools/hooks/dropbear /etc/initramfs-tools/hooks /etc/initramfs-tools/initramfs.conf BUSYBOX=y IP={IP ADDR}::{GW}:{NETMASK}::{IF}:off 例) IP=192.168.11.1::192.168.11.254:255.255.255.0::enp0s25:off /etc/dropbear-initramfs cd /etc/dropbear-initramfs cat /etc/initramfs-tools/root/.ssh/id_rsa.pub.initramfs > authorized_keys /etc/crypttabがないとdropbearはインストールされません。なければ空のファイルを作ります touch /etc/crypttab initramfsをアップデートします。 … Continue reading

Posted in Uncategorized | Comments Off on リモートPCのBoot & Suspend