Soumettre la recherche
Mettre en ligne
プロセスをしょうもないErrorで落とさないように頑張る
•
8 j'aime
•
3,875 vues
M
mookjp
Suivre
Node学園 22限目の発表資料です
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 19
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
Node.jsエンジニアErlangに入門するの巻
Node.jsエンジニアErlangに入門するの巻
Recruit Technologies
Node.jsエンジニア Erlangに入門するの巻
Node.jsエンジニア Erlangに入門するの巻
Recruit Technologies
Paris js
Paris js
Nicolas Goutay
Synchroniser ses applis simplement avec akeneo/batch
Synchroniser ses applis simplement avec akeneo/batch
gplanchat
nodejs vs vertx
nodejs vs vertx
Quentin Apruzzese
02 1 프로그램 작성 과정
02 1 프로그램 작성 과정
Changwon National University
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみよう
mookjp
アラサーから始めるビット演算
アラサーから始めるビット演算
mookjp
Recommandé
Node.jsエンジニアErlangに入門するの巻
Node.jsエンジニアErlangに入門するの巻
Recruit Technologies
Node.jsエンジニア Erlangに入門するの巻
Node.jsエンジニア Erlangに入門するの巻
Recruit Technologies
Paris js
Paris js
Nicolas Goutay
Synchroniser ses applis simplement avec akeneo/batch
Synchroniser ses applis simplement avec akeneo/batch
gplanchat
nodejs vs vertx
nodejs vs vertx
Quentin Apruzzese
02 1 프로그램 작성 과정
02 1 프로그램 작성 과정
Changwon National University
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみよう
mookjp
アラサーから始めるビット演算
アラサーから始めるビット演算
mookjp
爆速プレビュープロキシ pool
爆速プレビュープロキシ pool
mookjp
SIerにとっての越境 @ DevLOVE 199
SIerにとっての越境 @ DevLOVE 199
Yoshitaka Kawashima
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力
Yoshitaka Kawashima
データベース設計徹底指南
データベース設計徹底指南
Mikiya Okuno
第二回IoT関連技術勉強会 ログ収集編
第二回IoT関連技術勉強会 ログ収集編
tzm_freedom
Heroku Changelog in 2013
Heroku Changelog in 2013
Ayumu Aizawa
Heroku
Heroku
Ayumu Aizawa
第一回Web技術勉強会 efkスタック編
第一回Web技術勉強会 efkスタック編
tzm_freedom
第5回web技術勉強会 暗号技術編その3
第5回web技術勉強会 暗号技術編その3
tzm_freedom
Dreamforce '15のお話
Dreamforce '15のお話
tzm_freedom
第三回IoT関連技術勉強会 データ通信編
第三回IoT関連技術勉強会 データ通信編
tzm_freedom
第2回Web技術勉強会 webパフォーマンス改善編
第2回Web技術勉強会 webパフォーマンス改善編
tzm_freedom
Githubでアカウントを晒した事故に対する対処
Githubでアカウントを晒した事故に対する対処
まえすとろ
Analytics CloudとEmbulkを使った社会的データの分析
Analytics CloudとEmbulkを使った社会的データの分析
tzm_freedom
初めてのGemの読み方
初めてのGemの読み方
Takao Baba
ApexからAWS IoT叩いてみた話
ApexからAWS IoT叩いてみた話
tzm_freedom
第4回web技術勉強会 暗号技術編その2
第4回web技術勉強会 暗号技術編その2
tzm_freedom
第一回IoT関連技術勉強会 分散処理編
第一回IoT関連技術勉強会 分散処理編
tzm_freedom
第3回web技術勉強会 暗号技術編その1
第3回web技術勉強会 暗号技術編その1
tzm_freedom
Contenu connexe
En vedette
爆速プレビュープロキシ pool
爆速プレビュープロキシ pool
mookjp
SIerにとっての越境 @ DevLOVE 199
SIerにとっての越境 @ DevLOVE 199
Yoshitaka Kawashima
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力
Yoshitaka Kawashima
データベース設計徹底指南
データベース設計徹底指南
Mikiya Okuno
第二回IoT関連技術勉強会 ログ収集編
第二回IoT関連技術勉強会 ログ収集編
tzm_freedom
Heroku Changelog in 2013
Heroku Changelog in 2013
Ayumu Aizawa
Heroku
Heroku
Ayumu Aizawa
第一回Web技術勉強会 efkスタック編
第一回Web技術勉強会 efkスタック編
tzm_freedom
第5回web技術勉強会 暗号技術編その3
第5回web技術勉強会 暗号技術編その3
tzm_freedom
Dreamforce '15のお話
Dreamforce '15のお話
tzm_freedom
第三回IoT関連技術勉強会 データ通信編
第三回IoT関連技術勉強会 データ通信編
tzm_freedom
第2回Web技術勉強会 webパフォーマンス改善編
第2回Web技術勉強会 webパフォーマンス改善編
tzm_freedom
Githubでアカウントを晒した事故に対する対処
Githubでアカウントを晒した事故に対する対処
まえすとろ
Analytics CloudとEmbulkを使った社会的データの分析
Analytics CloudとEmbulkを使った社会的データの分析
tzm_freedom
初めてのGemの読み方
初めてのGemの読み方
Takao Baba
ApexからAWS IoT叩いてみた話
ApexからAWS IoT叩いてみた話
tzm_freedom
第4回web技術勉強会 暗号技術編その2
第4回web技術勉強会 暗号技術編その2
tzm_freedom
第一回IoT関連技術勉強会 分散処理編
第一回IoT関連技術勉強会 分散処理編
tzm_freedom
第3回web技術勉強会 暗号技術編その1
第3回web技術勉強会 暗号技術編その1
tzm_freedom
En vedette
(20)
爆速プレビュープロキシ pool
爆速プレビュープロキシ pool
SIerにとっての越境 @ DevLOVE 199
SIerにとっての越境 @ DevLOVE 199
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力
データベース設計徹底指南
データベース設計徹底指南
第二回IoT関連技術勉強会 ログ収集編
第二回IoT関連技術勉強会 ログ収集編
Heroku Changelog in 2013
Heroku Changelog in 2013
Heroku
Heroku
第一回Web技術勉強会 efkスタック編
第一回Web技術勉強会 efkスタック編
第5回web技術勉強会 暗号技術編その3
第5回web技術勉強会 暗号技術編その3
Dreamforce '15のお話
Dreamforce '15のお話
第三回IoT関連技術勉強会 データ通信編
第三回IoT関連技術勉強会 データ通信編
第2回Web技術勉強会 webパフォーマンス改善編
第2回Web技術勉強会 webパフォーマンス改善編
Githubでアカウントを晒した事故に対する対処
Githubでアカウントを晒した事故に対する対処
Analytics CloudとEmbulkを使った社会的データの分析
Analytics CloudとEmbulkを使った社会的データの分析
初めてのGemの読み方
初めてのGemの読み方
ApexからAWS IoT叩いてみた話
ApexからAWS IoT叩いてみた話
第4回web技術勉強会 暗号技術編その2
第4回web技術勉強会 暗号技術編その2
第一回IoT関連技術勉強会 分散処理編
第一回IoT関連技術勉強会 分散処理編
第3回web技術勉強会 暗号技術編その1
第3回web技術勉強会 暗号技術編その1
プロセスをしょうもないErrorで落とさないように頑張る
1.
2.
• • •
3.
• • • •
4.
• • • •
5.
• • • •
6.
• • •
7.
http.get('http://www.google.com/index.html', (res) =>
{ console.log(`Got response: ${res.statusCode}`); // consume response body res.resume(); }).on('error', (e) => { console.log(`Got error: ${e.message}`); }); app.use(function(err, req, res, next) { console.error(err.stack); res.status(500).send('Something broke!'); }); function myFunc() { throw new Error(“Error”); } try { myFunc(); } catch(err) { // handle err }
8.
•
9.
•
10.
• •
11.
• • •
12.
• • • •
13.
14.
•
15.
• • • •
16.
• • • •
17.
• • •
18.
• • • •
Notes de l'éditeur
* すでにQiitaや毛色の違うイベントで発表済みのネタなんでもしかしたら知っているかも * Node.jsでサーバやワーカをつくっている * 大量のコネクションをもつNode.jsサーバでのエラー処理が難しいということをここ1ヶ月くらいで考えていたので、自分なりにまとめてみた
Nede.jsはシングルプロセスシングルスレッドで稼働するイベントループモデルの実行環境となっています。 図のように、待ちが発生する処理をイベントループに積んでタスクを順次実行していくのでシングルスレッドでも遅くなることがないと言われています。 逆に待つ処理を入れてしまうのはよくないやり方です。
エラー処理もJavaとかPythonと比べると異なるやり方をとっていて、非同期I/O処理時のエラーは図のようにイベントのコールバックとして受け取ったり、ライブラリだとエラーオブジェクトとして受け取ったりします。 同期処理だとこれは他の言語でよくあるthrow,try-catchのやり方になります。
実際にNode.jsのアプリケーションを運用していて、難しいなーと思った事案をお話させてくだい。 図のようにWebSocketのクライアントとサーバがあり、コネクションが長時間保持されています。 \Nodeのイベントループには、それぞれのクライアントのためのタスクが積まれており、処理が終わったらクライアントへデータを送信するような構成になっています。
こういう場合、イベントループ中でやっていた処理中で想定外のエラーが発生すると
Node.jsではプロセスごと再起動する、というやり方になります。イベントループに積まれている未処理のタスクは実行しないまま終了してしまうということになります。 サーバに接続しているクライアントはすべて切断されてしまいます。 実際に、私が運用しているNodeアプリケーションの内部でつかっているライブラリの例外でこういうことが発生して障害につながった例もあります。 NodeのuncaughtExceptionというイベントで想定外の例外を検知して無理やり回復できなくもないですが、それは安全に回復できないため推奨されていません。
例えば、このようにPromise.catchしていても、catchのなかでエラーが投げられると、Promiseは何もしてくれません。 これはunhandledRejectionイベントをみることで想定外のエラーが発生したときも最悪ログ出力しておけばあとで気づいて修正することができます。 逆に、unhandledRejectionをみていないとバグに気づかないまま放置ということになりかねないと思います。
Télécharger maintenant