事象
Db2と接続するJava アプリにてSQLCODE805/SQLSTATE51002エラーが発生する。
[err] java.sql.SQLException: DB2 SQL Error: SQLCODE=-805, SQLSTATE=51002, SQLERRMC=NULLID.SYSSN200 0X5359534C564C3031, DRIVER=4.26.14 DSRA0010E: SQL State = 51002, Error Code = -805
環境情報
- Kubernetes v1.17(minikube)
- Buildroot 2019.02.7(minikubeのos-release)
- DB2 Client 11.5
原因
既知の事象で以下のような回答あり。
以下、本事象の該当箇所抜粋。
数千ものステートメントをキャッシュすると、サーバー側でパッケージ・キャッシュやアプリケーション・ヒープに追加のリソースが必要になる可能性があります。
対応策
メモリーを増強することで対応。
本事象はminikube上で展開したコンテナにて確認したエラーなのでminikubeに割り当てるメモリを増やした。
デフォルトでは2000MBなので以下にて4000MBに変更。
$ minikube config set memory 4000 ! These changes will take effect upon a minikube delete and then a minikube start
ちなみに単位をつけると文法エラーになるので注意。
X Set failed: [memory:strconv.Atoi: parsing "4000mb": invalid syntax]
起動時に反映される。
$ minikube start * minikube v1.6.2 on Microsoft Windows 10 Enterprise 10.0.18362 Build 18362 * Selecting 'virtualbox' driver from user configuration (alternates: [hyperv]) * Creating virtualbox VM (CPUs=2, Memory=4000MB, Disk=20000MB) ...
終わりに
上記割り当てを行う前はDb2プロセスを上げるとホスト上のWindows端末のCPUが跳ね上がっていましたが、minikubeへのメモリ割り当て追加によってWindows端末のCPUは100%に張り付くことがなくなりました。(代わりにメモリが100%近くになる)
スワップが起きるとCPU側に負荷がかかるのかもしれません。
[root@db2 ~]# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 47580 112160 2702832 0 0 76 3369 2019 3584 23 13 64 00
以上、ご参考になれば幸いです。