2016年2月6日土曜日

EmacsでCPU 100%使用して操作できなくなったら

あるJavaのソースコードを開くと、Emacsのプロセスが100% CPUを使ってしまい、カーソル移動もしにくくなってしまうことがありました。
調査方法
  1. M-: で (setq debug-on-quit t) と入力してください
  2. CPU 100%つかう状況になったらC-gを押してください(Quit)
  3. *Backtrace* バッファにQuitされたEmacs Lispのバックトレースが出ます。それをヒントに原因を見つけます。
今回遭遇した事象
Ubuntu 14.04のEmacs 24.3.1 で which-function-mode を有効にした状態であるJavaファイルを開くと起きました。 Mac版の Eamcs 24.5.1では再現しないので、Emacsのバージョンをあげると回避できるかもしれません。 EmacsでCPUを食うことはあまりなかったので、結構驚きました。
後日談: Emacsにprofiler機能があったのか...
M-x profiler-start で開始して、 M-x profiler-report で結果が見られます。 M-x profiler-stop で終了。これで、Emacsが遅い原因がわかるかも。

Androidで内部ストレージの容量が足りなくなったときの調査 (特にSHL21の場合)

概要
Android 4.1で使っているAQUOS PHONE SERIE SHL21で、「内部ストレージが足りない」というような通知がでました。 Androidのコンテンツマネージャーアプリで、内部ストレージに保存された、音楽、動画などをみてもさほど大きなものは入っていませんでした。(全部SDカードに入れています。) コンテンツマネージャーのメニューの「microSDと端末容量」を開くと、「その他」が4Gbyteほど占めていました。
コンテンツマネージャーアプリで調査しきれない内部ストレージ不足を調査しました。
手順
注意: ファイルを削除するとAndroidのアプリケーションが正常に動作しなくなることがあります。自己責任で、慎重に行ってください。
  1. duコマンドを使うために、BusyBox Install (No Root)をインストール。
  2. BusyBox Installの指示に従ってBusyBox、ターミナルアプリ を入れます
  3. BusyBoxの最初のコマンド(パス設定など)をクリップボードにコピー
  4. Androidのターミナルアプリを開いて、BusyBoxの最初のコマンドをペーストしてEnter
  5. ルートディレクトリからディレクトリごとの使用量を調査。コマンドを入力するため、Bluetooth キーボードを使うと便利です。
    cd /
    busybox du -hs * 2> /dev/null
    
  6. 使用量の多いディレクトリにcdして、busybox du を実行するのを繰り返します。
例: Android 4.1 SHL21でのディスク不足の原因
/storage/sdcard0/Android/data/jp.co.sharp.android.picturemanager.media/ にlocal-image-thumbs、 hires-image-cache というディレクトリが大量にあり、合計で4Gbyteほどになっていました。ギャラリー(画像閲覧アプリ)のサムネイルを保存しているようです。全て削除しました。削除した後もギャラリーは普通に動作します。