はじめに
色々とNode-redで処理を増やしていくと、だんだん挙動が怪しくなった時期があった。
あんまし細かく調査したわけじゃないので、嘘も混ざっているのかもだけれども、どこかで誰かの役に立てばと思い公開する。
追記
バージョンあげたら全く発生しなくなった。
元々0.17.5とかだったのを0.18.5くらいにあげたらサクサクになった。感謝。
起きる事象
1、Node-redが起動しない。
2、デプロイに失敗する&サーバーがクラッシュする。
3、きちんと書いているのに動かない。
4、見えないNodeが残っていてエラーが出る。
5、パフォーマンスの強烈な低下。
起きた事があるケース
・context.global.process.env.VCAP_SERVICES経由でEnvを見ようとするNodeがどこかにいる場合。
⇨1、2
・Subflowを入れ子する場合。
・Subflow内で激しく(感覚的に数十個)Nodeを入れた場合。
・そのSubflowを多数使う場合。 2018/05/14追記
・1回のDeploy時に変更となるNodeの接続数が多量の場合。(多分、サーバー側のチェックを走らせた時に、その数が多いと死んでしまう模様。) 2018/05/14追記
⇨1、2、3、5
・その辺で拾って来たソースをインポートする際、自分のパレットに無いNodeタイプがある場合に発生した事がある。使えないからと消しても、実は裏に残っているっぽい。この場合は、デプロイ時にエラーが出るので「ノードの設定」サイドバーからゴミNodeを削除してやればOKになるっぽい。
⇨4
・Debugノードを多数仕込んでいる場合。
⇨5
・HTTPでページを取りに行く際に、相手が応答しない。
⇨5
その他にも稀に(数十回に1回?)2が発生する事がある。再度デプロイすると問題なく通る事もあるので、メモリが足りてない時なのか?
手探り解決策例
・問題のありそうなSubflow周りを治して(Subflow化しない)デプロイやり直し
・メモリをMaxまで増やして再起動(これで動くケースもあった気がする)
・全然起動しなくてソースの修正すら出来ない場合、以下で頑張る。
・ブラウザ側で頑張ってソースを直して、すべてのタブでインデントされたJSONフォーマットでエクスポートして、メモ帳などに一旦退避
・Cloudantを開いて、noderedデータベースの<アプリ名>/flow文書を開く
・中のJSONのFlowの項目を一旦バックアップとして別のメモ帳に退避し、上記でエクスポートしたJSONを貼り付ける
・サーバー再起動
予防策
・動いたバージョンは定期的にExportして保管しておく。例えば、
・起動時のトリガーでCloudant上のflow文書をAPI経由で取得してバージョンが変わっていたらGmailなどに送付する処理を仕込んでおく
・Cloundantのレプリケーション機能などを使う?
・Deployする時にCPU使用率が高く無いことを確認して行う。(2018/05/14追記)
その他
全く起動しなくなると、ソースコード修正もままならないのでかなり焦りますが、Cloudant側から弄れるのでなんとか頑張りましょう。