パスワードを忘れた? アカウント作成
17420830 journal
日記

waneの日記: 容量が足りないんだってさ 16

日記 by wane

全銀ネットの不具合は「必要な容量が確保できない取引が発生した」らしい。
何の容量か書かれてないけどHDDじゃないよねきっと。
OSが32ビットから64ビットに変更されたっていうから、C言語で組まれたソースをコンパイルするときに設定しくじったんだろな。しらんけど。

自分が更改を担当したシステムでは単体テストから始まって結合テストやら負荷テストやら一通りやった。その時別端末からメモリのモニタリングもしてメモリリークとかメモリ容量が足りなくなったりしないよねって確認もしてた。
20年以上前に書かれたソースをコンパイルし直して最新とは言わないけど互換チェックをした上での新しいOSと新しいハードに載せるんだから、流れてくるはずの全パターンのデータを流して負荷テストなんてのもやってた。
当時は「そこまで要るの?」と思ってたけど、今回の障害を見てなるほどなと腑に落ちた。
機器の老朽化に対する更改だけなら全く同じバージョンのOSやらアプリやらミドルやらで、ハードも同等品をもってくればいいんだろうけどそれでも一通りテストしておかないとどこかの些細な設定ミスであっけなくコケるんだろな。

そもそも基幹アプリが書かれた当時のハードウェアからすると今の最小構成のサーバでも性能もメモリもHDDも当時を大きく上回る構成にしかできないのに、そこで何が足りなくなるのかというと、やっぱり32ビットから64ビットに変えたトコなんだろうなーと。

11月末までには原因分析やらが出てくるらしいのでそれ見てみたい。
まーもう二度と金融の仕事はしないんだけれども、単なる興味で。

■追記
接続図が載ってたのでメモがてら追記。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2023年10月17日 10時13分 (#4547071)

    現場の堪忍袋の容量だったりして

  • by miishika (12648) on 2023年10月18日 18時02分 (#4548118) 日記

    OSを32ビット版から64ビット版に移行したらしいけど、現時点で32ビット版のサポートがあるOSは何だろう。
    Windows Server 2008のESUは(Azure以外の場合)終わっているので、RHEL6(ESL付)だろうか。

  • by Anonymous Coward on 2023年10月17日 12時47分 (#4547167)

    OSとアプリ変えたときに、セットアップマニュアルからJAVA VMのメモリ周りの設定変更(容量拡大)が抜け落ちてて、
    最初期バージョンのメモリ容量のまま動かしたとか……

    「原因:セットアップマニュアルを適時更新していなかった。」みたいな。

  • by Anonymous Coward on 2023年10月17日 22時05分 (#4547578)

    全銀システム障害の原因判明、メモリー不足でインデックステーブルが不正確な状態に [nikkei.com]

    メモリー不足に起因し、金融機関名などを格納したインデックステーブルに不正な値が紛れ込んだ。

     インデックステーブルはRCのディスク上にあるファイルから展開する。このファイルを作成するプログラムを実行したタイミングで、一時的に確保するメモリー領域が不足し、ファイルの内容が不正確になったという。

    ディスク上のデータからインデックステーブルを作成する処理中に、
    ワークメモリかスタックか何か不明だけど、メモリ不足で強制終了したから、
    インデックステーブルが不完全な状態で展開されてシステムが止まったと。

    このインデックステーブルに手数料計算用のパーセンテージとかも含まれていて、
    その辺の計算をするときにうっかり空間計算量がO(n^2)みたいなロジックで極端に膨れたか、
    実は再帰で余計なものも一緒に積んでスタック不足でコケたとかですかね。

    • あくまで予想なのだけど
      OSが32bitから64bitへ変更
      →コンパイラも当然64bit版になる
      →古いCのソースを64bit版でコンパイルして使用
      →int型やchar型のバイト数が変わってメモリの領域を確保するのに計算が狂って確保した領域からメモリがあふれた・・・
          テストの時はギリあふれない程度の小さいデータでテストしてた・・・
      とかじゃないかなーとか思ったりする。
      しらんけど。

      どんなレポートが出てくるのか楽しみ←不謹慎かも

      親コメント
      • by Anonymous Coward

        テストでそれなりのサイズにしていても、日本信号の自動改札機が死んだ [wikipedia.org]みたいなパターンだと特定の倍数で起きるから。

        mallocが8バイト単位にそろえるのでアクセス違反してても余計に領域を確保してる範囲に収まれば死なない。
        けど、特定倍の時にはみ出てメモリアクセス違反で死亡とかね。

      • by Anonymous Coward

        sizeof(*uint32_t)をsizeof(uint32_t)としてたみたいな奴か……

  • by Anonymous Coward on 2023年10月18日 10時35分 (#4547768)

    8月のトヨタ自動車の生産指示システム障害、原因はディスク容量不足 [hardware.srad.jp]を
    思い出すけど今回の話はディスク容量ではないのね。
    構造体内でポインタサイズが変わっているのに固定値で
    参照していたところでもあったのかな?

    # まあCで書いてたわけではないだろうが…

  • by Anonymous Coward on 2023年10月18日 20時09分 (#4548211)

    たまりにたまったものを一斉に処理したので想定以上のトランザクションが発生したってことなのかな。
    わざわざ不運が重なるようなリリースをしてしまったのだ!

typodupeerror

未知のハックに一心不乱に取り組んだ結果、私は自然の法則を変えてしまった -- あるハッカー

読み込み中...