WEBシステムがダウン前の前兆感知方法と外部プログラム呼び出し制限について

このQ&Aのポイント
  • Javaで作られたWEBシステムで外部プログラム呼び出しによる障害が発生しました。サーバの重さやログインできなくなる前にダウンの前兆を感知する方法を教えてください。
  • 外部プログラム呼び出しからダウンする前のアプリの重さの前兆を感知する方法を教えてください。
  • WEBシステムにおいて外部プログラム呼び出しによるダウンを防ぐためには、ダウンする前の前兆を感知する仕組みが必要です。具体的な実装方法やアイディアをご教授ください。
回答を見る
  • ベストアンサー

WEBシステムがダウンする前に前兆を感知する仕組み

お世話になります。 Javaで作られた不特定多数のユーザさんが利用するWEBシステムがあります。 外部プログラムを呼び出した処理で外部プロセスのリターンが滞ったため、 外部プロセスの呼び出しボタンの連打→プロセスが増える→サーバが重くなる→システムにログインできなくなる。のような障害が発生しました。 これから外部プログラムの呼び出し後の待ち時間をタイマーで制限するような処置をとりたいと思いますが ほかにもアプリの方でシステムが重くなってダウンする前に前兆を感知する仕組みに関して、いいアイディアがあったらご教授お願いします。 (あくまでもアプリの方でできることを知りたいです。) ちなみにダウンしてからはダウンした情報を知る仕組みは既にもっています。 皆様の知恵をぜひぜひお借りしたいです。 よろしくお願いいたします。m(_ _)m

  • Java
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
noname#98192
noname#98192
回答No.1

本質的な解決はアプリサーバーと外部プロセス実行サーバーを切り離して負荷分散させるのが正しいでしょう。 とはいえ、そうもいかないケースもあるかもしれませんので、捻り出してみました。 Javaの監視で言えばJMXを利用するのはどうでしょう。 外部アプリがJavaであればそのプロセスを監視することも可能です。 これが「アプリの方でできること」でないとするならば、思い切ってRuntime.exec()を使ってOSをネイティブに監視してしまうというのはどうでしょうか。 (本来、サーバーOSの監視であればnagiosやhinemosなど監視アプリを利用するのが良いと思います) あるいは、Webアプリから外部アプリの実行をシリアルにキューイングさせる。 Webアプリとは非同期で、キューの結果待ち画面を作る、というのも手です。これはアプリ要件次第ですね。 アプリの要件や外部プロセスが何かが見えないので追記してもらえればもう少しいいアイディアも出せるかもしれません。

situmontakusan
質問者

補足

shinishiwa様 せっかくご回答頂いたのに、確認するのが大分遅れてしまって申し訳ありませんでした。 自分の要件をちゃんと伝えられなかった気がしますが、自分が希望していたいろんな視点からの分析をしてくださってびっくりしました。 要件を追記すると アプリの実施中に起こりうるあらゆるシステムダウンによる危険(外部プロセスの呼び出し、内部プロセスの処理ともに、)に対して アプリ保守チームとしてなにか知恵があったら教えてねと ユーザさんに言われたことです。 できなければ、できないと答えていいものですが、専門家の意見に出会ったらと思い、質問しました。 パフォマンスをよくする方法、メモリ消耗を監視する方法、いろんな視点からのアプローチが知りたかったです。 (これでわかりますかね?不安・・・) 1.アプリサーバーと外部プロセス実行サーバーを切り離す: パフォマンスを向上させるいい方法ですね。 実現可能な提案になるか引き続き検討していきます。 Javaの監視で言えばJMX: これで要件は実現できそうな気がします。 (保守チームは3人構成なので工数的に引き続き検討して、お客さんにも判断してもらいたいと思います。) 思い切ってRuntime.exec()を使ってOSをネイティブに監視: 外部でしたほうがもっといいなら、アプリの内部ですることは要求されないと思います。 引き続き、素敵なアドバイスをいただけたら幸いです。 よろしくお願いします。

関連するQ&A

  • 外部プロセスについて

    現在、javaを本格的に学ぼうか悩んでいます。 pdfファイルのデータベースを作成し、検索、表示するというGUIのプログラムを作りたいのですが、javaでそのようなものが作れるのか調べています。 タイトルにあるようにjavaのみでは難しそうなので、外部プロセスを利用して(特にpdfの表示)作成しようと考えました。 試しに、ボタンをクリックすると外部プロセスが起動する、という簡単なプログラムを作ってみたところ、確かに外部プロセスは起動しましたが、この外部プロセスをインターナルフレームとして起動させることはできますでしょうか?

    • ベストアンサー
    • Java
  • Linuxでシャットダウンの感知

    Linuxでシャットダウンの感知 自作のデーモンを作っています, ファイルを操作するプログラムなのでファイルをオープンしたまま 強制的にプロセスが終了するとファイルが壊れるかもしれないので, シャットダウンを感知して,ファイルをクローズする仕組みを考えています. それは可能でしょうか? 宜しくお願いします.

  • JAVAで作成したプログラムは外部からの指示をどうやってうけとるのか?

    このたび、JAVAで、通信関連のプログラム(常駐)をつくることになりました。それで、このプロセスに対して外部からコマンド(終了の指示、何か処理をしなさい等)を発行したいのですが、そのインターフェースが判りません。 OSはSolaris又はLinuxを採用する予定です。C言語で作成した時は、メッセージキュー、シグナル等を使用していたのですが、100% pure JAVAの環境で、このような外部からコマンドを受け付ける仕組みは、作成できるのでしょうか。ご存じの方おりましたら、教えて下さい。

    • ベストアンサー
    • Java
  • 時間がかかり過ぎたプロセスをキルする方法

    system関数を用いて、ループ内で外部プログラムを連続的に実行しています。ところが、時々、無限ループに近い状態に陥ってしまうデータがあるので、時間制限を設けて、その時間内に終了しない場合には、そのプロセス(外部プログラム)を強制終了させたいのです。 また、もし、強制終了させた場合には、それと分かるように戻り値を返してもらえると、なお良いです。 この仕組みを実現する手法、もしくは、モジュール等を教えて頂けないでしょうか。

    • ベストアンサー
    • Perl
  • アプリケーションAから外部アプリケーションBを

    アプリケーションAから外部アプリケーションBを 呼び出す処理。 Bのフォームを常に最前面にして、Aのフォームを操作できないようにしたいです。 ただしAにあるタイマーを止めないようにもしたいです。 そこで [C#] //ファイルを開いて終了まで待機する System.Diagnostics.Process p = System.Diagnostics.Process.Start("C:\\test.exe"); p.WaitForExit(); ※「test.exe」を外部アプリケーションBとする。 を使ったのですが、Aのタイマーが止まってしまいます。 何か良い方法はないでしょうか? 言語はC#です。

  • VC++2005で外部プログラムを起動

    VC++2005EEを使って実行ファイルとは違うフォルダにある外部プログラムの起動をしようとしています。 System::Diagnostics::Process::Start を使って起動しようとしたら起動はしたのですが、本来その外部プログラムが読み取るデータ(外部プログラムと同じフォルダにあるデータ)を読み込んでくれません。 どうしてなのでしょうか?また、どうしたら正常に起動することができるのでしょうか? VC++はまだ始めたばかりでよくわかりませんが、よろしくおねがいします。

  • プログラムからの返答の意味がわかりません..

    import java.io.*; public class Teme { public static void main(String [] args) { String [] command = { "C:\\Users\\yuzumodoki\\Desktop\\chunkparser-1.0\\chunkparser-1.0\\parser.exe", "aaaa" }; // 外部プログラムを実行 Runtime runtime = Runtime.getRuntime(); Process process = null; try { process = runtime.exec(command); } catch(Exception exception) { System.err.println(exception.getMessage()); exception.printStackTrace(); System.exit(-1); } // 外部プログラムの標準出力から読み込み BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); System.out.println(br); try { String line; while((line = br.readLine()) != null) { System.out.println(line); } } catch(Exception exception) { System.err.println(exception.getMessage()); exception.printStackTrace(); System.exit(-1); } finally { try { br.close(); } catch(Exception exception) { System.err.println(exception.getMessage()); exception.printStackTrace(); System.exit(-1); } } } } 上記のプログラムはparser.exeにアクセスし,そのアプリケーションに文字列を送り,処理をしてその結果を取得するというものです. 本来"aaaa"と送ると"(aaaa aaaa)"と返ってくるプログラムなのですが, java.io.BufferedReader@89ae9e と返ってきます.これはなぜだかわかる方いらっしゃいますか?また,aaaa aaaaと本来の値を返すにはどうすればいいかわかる方いらっしゃいませんか.. もしわかる方いらっしゃたら教えて頂けたらすごくうれしいです(つj)

  • エクセルのBEEP音でメール送信するには?

    エクセルファイルにエラーが生じた場合にBEEP音を出す仕組みのファイルがあるのですが、PC上で音を感知したらエクセル以外のプログラムからメール送信できるソフトあるいはアプリがあれば教えて頂きたいのですが...。

  • java 外部プログラムの実行

    いつもお世話になっています。 タイトルのとおり外部プログラムの実行方法についてです。 現在プログラムAを実行するとプログラムBが実行されるプログラムを作成できないかと考えています。 少し調べてみたところ外部プロセスの実行がそれにあたるかと思うのですが、ネット上にあるサンプルプログラムを実行してみてもコンパイルこそできるものの実行がエラーになってしまいます。 以下のサイトを参考にしていますが、サンプルにある通りのメモ帳の実行は出来ますが,javaプログラムの実行はできない状態です。 http://syunpon.com/programing/java/sample/execute.shtml 私の考えているようなことはjavaで実装可能なのでしょうか? ご存知の方おられましたらご教授お願いします。

    • ベストアンサー
    • Java
  • Javaの強制終了するコード

    Javaのテスト勉強をしております。 つきましては教えていただきたいことがございます。 入力値に問題があったらプログラムを強制終了させるコードとしてテキスト中では 問題によってreturn()となっていたりSystem.exit()となっていたりします。 この二つは何が違うのでしょうか。 ご回答くださいますようお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう