• 締切済み

プログラムのリリースを本稼働中に行っても問題ない?

VB.NETでシステムを開発しました。 クライアントからサーバ機能を呼び出すにはIIS上のWEBサービスを呼び出す方式です。 ┏━━━━━━┓ ┃クライアント┃ ┗━━┳━━━┛    ┃ ┏━━┻━━━┓ ┃ IIS  ┃ ┗━━┳━━━┛    ┃ ┏━━┻━━━┓ ┃ DBMS ┃ ┗━━━━━━┛ 顧客から時々エラーになってサーバ側の処理が止まってしまうと言われています。 エラーログを確認すると「基礎になる接続が閉じられました。」と言うようなメッセージです。 なぜそのようなエラーになるのか全く原因がわからず、困り果てていました。 そんなある日、いつものように(それはそれで困るけど・・・)いくつかバグ・仕様変更があり、サーバ側機能を改修しました。 上司は、顧客の業務時間中に修正版のリリース(プログラムの入替)を行いました。 どうやらこの上司は修正版のリリースをいつも顧客の業務時間中に行っているようです。 私は現在稼働中のシステムのため修正版のリリースは顧客の業務終了後にすべきと言いましたが、上司は、『実行時、プログラムはメモリに読み込まれているのでHDD上のプログラムを入替ても問題ない。』と言いました。 そこで質問です。 本稼働中のシステムの修正版プログラムのリリースを本稼働中に行っても問題ないのでしょうか? 上司の言っていることが正しいならば、極端な話、本稼働中にプログラムをHDD上から削除しても大丈夫ってことですよね?だってメモリに読み込まれているはずでしょ? でもそれっておかしいと思いません? (上司の言うように、実行時はプログラムはメモリに読み込まれている点は私も同意します。同意できないのはHDD上のプログラムの入替がメモリ上のプログラムに影響を与えないのかどうかってことです。普通に考えると、HDD上のプログラムが変更されたのだからOSはプログラムを読込み直すはずでは?) ついでに質問ですが、365日24時間稼働しているECサイトなど、プログラムの入替などはどうやっているのでしょうか? プログラムの入替時はシステムを停止しているのでしょうか?それとも何らかの裏技(まっとうな技術)があり稼働中のまま入替が可能なのでしょうか?

みんなの回答

回答No.3

実行可能バイナリ(Windowsであればexeやdllなど)は、実行時にメモリに読み込まれると同時にファイルがロックされ、変更や削除ができなくなります。また、dllなどのモジュールは、一度メモリに読み込まれると明示的に開放しない限り再度読み込まれることはありません。Windowsがメモリを確保するためにスワップの対象にしたとしても、コードはページファイル上におかれてロックは継続されます。 今回はIISを使っているようなので、IISが扱うファイル(html、ASP、ASP.NET)のことなのでしょう。 これらのファイルは、IISがメモリに読み込んで使用しますが、ロックはしないので、上書きや削除が可能です。しかし、IISはメモリ上のデータをそのまま使い続けるわけではなく、新しく処理を始める際にファイルが変更されていないかをチェックし、必要であれば再読み込みします。ただし、ファイルを変更したら即座に再読み込みされるかというとそうでもない場合があり、厳密なタイミングは公開されていない状態です。 なので、動作中に更新することは可能ですが、複数ファイルを更新する場合には、 ・IISが読み込み中のファイルがあると、上書き処理がエラーで中断される可能性がある ・コピー中にIISが動作して、更新されたファイルと更新されていないファイルが混在状態での動作になる場合がある といったことから、やめておいた方が賢明です。 ファイルの変更をチェックしているので、「メモリ上に読み込まれているから大丈夫」というのは間違いです。

  • foomufoomu
  • ベストアンサー率36% (1018/2761)
回答No.2

詳しくは知りませんが、いまどきのプログラムは一度にメモリに読み込まれず、必要に応じて少しずつメモリに読み込まれることがあるようです。

  • t_ohta
  • ベストアンサー率38% (5080/13275)
回答No.1

プログラムは実行中メモリに読み込まれているので、HDD上のファイルを書き換えてもメモリ上に読み込まれているプログラムには影響しません。 プログラム(プロセス)の再起動を行わない限り、プログラムの変更は反映されません。 ファイルが書き換わってもOSが勝手にプロセスを再起動することもありません。 但し、注意が必要なのは、そのプログラムが親プロセスである必要があると言う点です。 何かのプログラムから呼び出される形で動くモノだと、呼び出されるたびにHDDから読み込まれますので、ファイルの書き換え中に呼ばれるとエラーになりますし、複数起動される場合はプロセスによって処理が異なると言う問題を起こします。 24時間365日稼動しているECサイト等ですが、基本的にサーバは複数台で冗長化されており、ロードバランサーを使って負荷分散させています。 メンテナンスを行う場合、DBの改修が必要といった大規模なモノでなければ、1台のサーバをロードバランサーから外してシステムの入れ換え・再起動を行い、動作確認が出来たらロードバランサーに登録すると言うのを順番に繰り返すことで、サービスを止めずにメンテナンスを行います。

関連するQ&A

  • 現行稼動しているアプリケーションをMetaFrame上で稼動させるには?

    現行VB.Net(Ver.2003)+LinuxServer(Oracle9i)で稼動しているシステムがあります。 このシステムをMetaFrameで稼動させたいという要望があります。 が、実際プログラムの何処をどのように修正すればよいのか全然見当がつきません。 『こんなことに気をつけないといけない』ですとか、 『こういうプログラムはMetaFrameでは不向きだ』とか等々、どなたかアドバイスを頂けたらと思っております。 ちなみにMetaFrameが弱いとされている帳票は、すべてExcelに出力し、Excelからの印刷となっております。 あと、動画を扱うこともありません。 宜しくご指導願います。

  • パソコンを立ち上げて最初の5分程プログラムが動き続け(稼動ランプも点滅

    パソコンを立ち上げて最初の5分程プログラムが動き続け(稼動ランプも点滅し続け)アプリケーションの起動に時間が掛かり、コントロールパネルを開いてもアイコンが表示され難く、インターネットに接続するにもWEBが開かず、止めると『プログラムが応答していません』の表示に【プログラムを直ぐ閉じる】を選択してもマウスは動くものの一時フリーズしたようになります。パソコンはテレビ付きの【東芝dynabook-QOSMIO F20】で、HDD空60GB・メモリ512MBですが、この状況を推測して以下の項目で御願い致します。 (1) 起動後長く続くプログラム稼動の実態 (2) プログラム稼働中にキャンセルしても直ぐに終われない訳

  • システムの稼働率の計算

    サーバシステムの稼働率を目安くらいで良いので数値にしたいのですが、MTBFやAFRの数値から計算することはできるのでしょうか?情報処理技術者試験などの問題では「たとえば故障率は0.1とする」などとなっているのですが、実際のハードウェアの数値を当てはめて計算したいのです。 ウェブを探して実際の製品のMTBFはいくつか集めました。 SCSI-HDDは60万~100万時間くらい。 ATA-HDDは30万~40万時間くらい。 マザーボードは10万時間くらい。 http://www.intel.co.jp/jp/support/motherboards/desktop/mtbf.htm ルータは35万時間くらい。 http://www.nec.co.jp/octpower/products_eol/router/ip38x_52pro.html AFR(年間平均故障率)の算出は年間稼働時間÷MTBFとあったので、 http://www.mdit.co.jp/apricot/faq/kqaa01.htm#q6 年間稼働時間=1年365日×24時間=8760時間 HDDのMTBF 仮に60万時間として 8760÷600000=0.014 … AFR=0.014 ルータのMTBF 35万時間→AFR=0.025 マザーボードのMTBF 10万時間→AFR=0.087 システムの例として、WWWサーバとDBサーバから構成されているウェブサイトで、各サーバのHDDはミラーリング(RAID1)で二重化されているケースを考えたとき、これらの数値を使って計算することができるのでしょうか? 直列・並列の概念図は以下のようになると思います。              ┌[HDD]┐       ┌[HDD]┐ ──[R]─[WWW]─┤     ├─[DB]─┤    ├─              └[HDD]┘       └[HDD]┘ HDD2台(RAID1)の故障率:0.014×0.014=0.000196 →稼働率=1-0.000196=0.999804 サーバ1台あたり稼働率:(1-0.087)×0.999804=0.913×0.999804=0.912821 サーバ2台(直列)の稼働率=0.912821×0.912821=0.833242 ルータも直列に接続=(1-0.025)×0.833242=0.975×0.833242=0.812410 システム全体としてみると稼働率=0.812、故障率=1-0.812=0.188=18.8% という数値が出てきました。 思っていたよりずっと低い稼働率(高い故障率)なのですが、こんなものなんでしょうか?それとも何か(前提条件、計算方法、数値)が違っているのでしょうか?

  • プログラマは仮リリース中でもエラーを出したらクビ?

    とある中小工事会社で社内SEみたいなことをしています。 SEといってもそんな本格的なものではなくて、いってみればパソコンの便利屋さんです。 でも趣味でプログラムをやっていて、ちょっとした他愛ないツールを作っては喜ばれる、そんなことをしていました。 ところがひと月ほど前、そんな私の腕を買われて社内システムの開発を頼まれました。 で、まぁ作ったわけですが。 とりあえずテストデータでは正常稼動していたので仮リリースをしたんです。もちろん私がモニターしながら、何かあったら対応するという条件で。 そうしたら正常な処理をしなくて。 当然私は修正作業に取り掛かろうとしました。 そうしたら、です。 新規にシステム開発の命令が下されまして。 仮リリース中のシステムの対応もありますしすぐには目処が立たないと申し上げたのですが、エラー対応よりも新規開発を優先しろとの社長命令が下されました。(中小なのでこういうところはトップダウンです) やむなく私は新規開発を行い、今週そちらの目処が立ったのですが。 今度は先のシステムの不具合について社長が大激怒。 「成果の上がらないヤツはクビだ!」とか、「不完全なシステムを作りやがって、損害賠償請求してやる!」とか言われてしまいました。 結果的に不完全なシステムを作ったのは事実ですし、それを指して「成果がない」と言われれば、まぁ反論はできないかなとは思います。 でも、このひと月で別システムを作っていましたし、それまでにもいろいろツールを作っているのに「会社に何の貢献もしていない」と言われたのは心外です。 不完全なシステムにしたって、完成させるつもりですから、未完成なだけで不完全ではありません。そもそもどうしても早急に形にして欲しいと言うから、仮リリースという形で様子を見ましょうとしただけです。 そもそも、ウチの会社はいわゆるIT部門というものがなく、私もパソコンの知識が社内で一番だからというだけで任されてるようなものです。当然それ系の同僚なんていませんし、相談もできなければ手分けすることもできません。 そんな状況で起こった出来事でした。 そこで質問なのですが、 仮リリース中のプログラムにエラーが出るというのは、損害賠償を請求されても仕方ないほどの重罪ですか? プログラムが未完成の間は「仕事してない」と言われても文句は言えませんか? もし社長の怒りが不当である場合、私はどんなリアクションを起こせば良いでしょうか? このままではクビにされてしまいます。 あと、そんなわけで私は「SEの真似事」みたいなヒヨッ子です。本職の方からは心得みたいなものを手ほどきしていただけると助かります。 よろしくお願い致します。

  • CPU稼働率100%

    ウィンドウズのUP DATEで Windows Genuine Advantage (正規 Windows 推奨プログラム) 通知ツール (KB905474) をダウンロードして以来、ウィンドウズ UP DATE の自動更新に設定するとCPU稼働率100%から下がらなくなりました。 自動更新を無効にした場合のみCPU稼働率が2~8%くらいに落ち着きます。 セキュリティーソフトは フレッツ クリア です。 どの様にすれば症状改善しますでしょうか? 一応、システムの復元を試しましたがだめでした。。 ご回答宜しくお願い致します。 使用機種は SOTEC デスクトップ PV2270S CPU:celeron 2.70GHz HDD:120G メモリ:768MB

  • エクセル2016の更新プログラムについて

    オフライン環境で更新プログラムをインストールする際について 相談がございます。 エクセル2016をオフラインインストーラ(MSI)でインストールして オフライン環境で運用してます。 まず更新プログラムがリリースした場合 Windows インストーラー (MSI) を使用しているバージョンの Office の最新の更新プログラムサイト https://docs.microsoft.com/ja-jp/officeupdates/office-updates-msi からダウンロードした更新プログラム 最新は セキュリティ更新プログラムの説明: Excel 2016 2021 年 6 月 8 日 (KB5001947)に なります。 KB5001947をオンラインであらかじめダウンロードして オフラインのwindowsserver2012R2にインストールすると (1)アップデートカタログからダウンロードした場合 mspファイルの対応になるのですが Windows インストーラーサービスでアップグレード修正プログラムをインストールできません。アップグレードするプログラムがないか、またはアップグレード修正プログラムでアップグレードするプログラムのバージョンが違う可能性があります。アップグレードするプログラムがこのコンピューターにあり、アップグレード修正プログラムが正しいかどうかを確認してください。と 表示させインストールできない。 ※32bit版/64bit版両方試しました。 (2)マイクロソフトホームページからダウンロードした場合 exeファイルの対応になるのですが このパッケージをシステムにインストールすることによって影響を受ける製品はありませんと 表示させインストールできない。 ※32bit版/64bit版両方試しました。 こちらに関して知見がある方アドバイス頂けたら助かります。 よろしくお願いいたします。

  • 修正プログラムをインストールしようとしたらエラー

    http://support.microsoft.com/?kbid=932385 ここからIIS7.0の修正プログラムをインストールしようと思ったら、 「この更新プログラムはお使いのシステムには適用されません」 というメッセージが表示されインストールができません。 ビットバージョンは、間違っていないと思いますが、一応別のビットバージョンをインストールしてみましたが、同じメッセージが出ます。 検索して原因を調べてみましたが答えは見つかりませんでした。 どうしてもやりたい事があるので、どなたか解決法をよろしくお願いします。

  • Win2000上のASPをwin2008に移行

    お世話になります。IISのバージョンとASPについて教えてください。 今度社内のサーバー(Win2000)をリプレースすることになりました。 このときこのサーバーで稼働するASPで独自開発されたWEB発注システムもリプレースする必要があります。 新しい環境はWin2008R2になりますので、当然IISのバージョンが変わります。 この時、このASPプログラムは動かないものでしょうか? 仮に動いてもやはりASPをASP.netにコンバージョンすべきでしょうか? コンバージョンするにも費用がかかるのでできればそのままASPでサーバのみリプレースしたいなと思っています。 ご意見聞かせてください

  • 「全てのプログラム」にあるプログラムのうち、いくつかが消えた?

    「全てのプログラム」の中に登録されてあるプログラムのうち、いくつかのプログラムが消えたようです。 具体的にはプログラムのアイコンが変っている、パターンとしては2つあって、プログラムフォルダ内に該当プログラムのフォルダがあるが「*.exe」がなくなっているパターンと、プログラムフォルダ内の該当プログラムが入っているはずのフォルダごとなくなっている場合があります。 最近、HDかマザーボードかメモリか、に異常があると思われる症状で起動できなくなるトラブルあたりからこの症状が出ています。 結局はメモリの異常だったようで、512MB×2のうちの1枚が256MBで認識されかつ、マザーボードとの相性?が悪かったらしく、これを外すことで安定稼動するようになりました。 どなたかこの「プログラムが消える」について、どのような原因が考えられるか、アドバイスお願いします。 ちなみに OS:WinXP SP2 HDD:S-ATA 120GでC,Dの二つのパーティション マザーボード:Aopen AK77-400MAX 電源:400w といった構成です。 必要な情報があれば補足しますのでよろしくお願いします。

  • 大量のスタートアッププログラム

    メインメモリ512MBのXPなのですが、 数ヶ月前から、仮想メモリの最小値が低すぎると頻繁にでるので 自分なりに調べて仮想メモリを修正しましたが改善しません。 ネットとメールくらいしかしないのですが。 常駐プログラムが多いのかと思い調べた所、 システム情報のスタートアッププログラムが数千件もありました。 例えばAWVIEW32.DLLなどなど ユーザー名はNT.AUTHORITと.DEFAUTとなっています。 場所はスタートアップと表示されてます。 これらすべてが自動起動してるのでしょうか。 ノートンを入れていて、スキャンしたら「安全」といわれます。 不要なプログラムは削除とか無効にしたいのですが システム構成ユーティリティには20個程度しか表示されません。 この大量のスタートアッププログラムはどうすればよいのでしょうか。