カテゴリー : 2015年 1月

Internet Explorerは動作を停止しました。問題が発生したため、プログラムが正しく動作しなくなりました。プログラムは閉じられ、解決策がある場合はWindowsから通知がきます。

経理の方から、某銀行の送金システムでエラーメッセージが出て、強制終了してしまうのでなんとかして欲しいという依頼がきました。

以下、メール抜粋です。

◯◯銀行の送金システムでインターネットエクスプローラーしか対応していないので、インターネットエクスプローラーを使用しているのですが、今日は、とても調子が悪く、銀行のシステムにログインした途端、かたまってしまい、以下のメッセージが出て強制終了してしまいます。

Internet Explorerは動作を停止しました。問題が発生したため、プログラムが正しく動作しなくなりました。プログラムは閉じられ、解決策がある場合はWindowsから通知がきます。

銀行のサポートセンターに電話しましたが、おそらく私のInternet Explorerの問題で、再起動したり、時間をおいたりしてくださいと言われたのですが、直る気配がありません。

Internet Exploreを再インストールするとかした方がよいのでしょうか?

送金がまったくできず、大変困っております。

解決方法

Internet Explorer のキャッシュを削除することで解決しました。

原因は不明ですが、似たようなエラーに悩まされた方はブラウザのキャッシュを削除するといいかもしれません。

[CircleCI] Ruby のバージョン指定について

CircleCI の公式ドキュメントに書いてある ruby のバージョンのみ対応しています。

CircleCI

続きを読む

[MongoDB] mongo shell から別 DB へ接続してクエリを実行する

MongoDB で別データベースに接続してクエリを実行する方法をご紹介します。

MongoDB

続きを読む

[Node.js] Error: bind EADDRINUSE

Node.js (Express) で forever restart 後に bind EADDRINUSE エラーが頻発する障害が発生しました。

Error: bind EADDRINUSE はそのポートが既に使われてる場合に発生するエラーでして、同じ障害に悩まされた人のために解決方法をメモしておきます。

エラーメッセージ

Error: bind EADDRINUSE
    at errnoException (net.js:904:11)
    at net.js:1084:30
    at Object.12:1 (cluster.js:592:5)
    at handleResponse (cluster.js:171:41)
    at respond (cluster.js:192:5)
    at handleMessage (cluster.js:202:5)
    at process.EventEmitter.emit (events.js:117:20)
    at handleMessage (child_process.js:318:10)
    at child_process.js:392:7
    at process.handleConversion.net.Native.got (child_process.js:91:7)
    at process.<anonymous> (child_process.js:391:13)
    at process.EventEmitter.emit (events.js:117:20)
    at handleMessage (child_process.js:318:10)
    at Pipe.channel.onread (child_process.js:343:11)

まず netstat コマンドで node.js サーバーのプロセスで使うポートが他のプロセスに使われていないか確認します。

$ netstat -nltp | grep 3000
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:3000                0.0.0.0:*                   LISTEN      6653/phantomjs

今回は phantom.js が 3000 番ポートで起動していたようでした。phantom.js は利用しているものの他のポート番号を指定して起動させるようにしていたので 3000 番ポートを使っていた理由は不明です。プロセスを停止させて問題ない場合、 ps aux | grep phantomjs で phantom.js の PID (プロセス番号) を特定して kill コマンドでプロセスを終了させます。

最後に forever や pm2 もしくは node コマンドなどで node サーバーを起動させて、エラーログに Error: bind EADDRINUSE が出力されていないことを確認すれば完了です。


参考情報

Node.jsの開発で `warn – error raised: Error: listen EADDRINUSE` って怒られるときの対応 – Qiita

node.js – Nodejs application Error: bind EADDRINUSE when use pm2 deploy – Stack Overflow

Linux ソケット・プログラミングの 5 つの落とし穴

[JavaScript] jsdom memory leak (メモリリーク)

Node.js で jsdom を利用して数万件のウェブページをスクレイピングしたところ out of memory エラーが発生しました。

Node.js のエラーメッセージ

FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory

jsdom のメモリリーク解決方法

jsdom.env メソッドに渡す callback メソッドの中で使用した window オブジェクトに関連するメモリを解放するために window.close() メソッドを呼ぶ必要があるそうです。

jsdom.env(html, function (errors, window) {
  // free memory associated with the window
  window.close();
});

ドキュメントに書いてある通りに使わないとダメだなぁと痛感しました・・・。


参考情報

tmpvar/jsdom

jsdom and node.js leaking memory – Stack Overflow

javascript – Memory leak in Node.js scraper – Stack Overflow