1.现象:
某现场由于设备少,E2E/DryRun/OPT各种环境合设,在做相应的6000万用户性能测试的时候,容器会经常出现TNS-12518导致重启问题,在容器的日志中的日志前期主要集中在JAVA的前台程序,后面再计费的后台程序上也偶尔出现。前台容器日志:
后台计费容器日志:
2.检查过程
2.1.检查各项数据库的的session和processor参数等设置情况。
2.2.检查Oracle用户的资源设置情况使用ulimit -a和查看/etc/security/limits.conf的nproc的参数设置。
2.3查看系统服务限制情况
root@bsdccdb01db01[/root]# systemctl show --property DefaultTasksMax
DefaultTasksMax=18446744073709551615
root@bsdccdb01db01[/root]#
root@bsdccdb01db01[/root]# cat /proc/145835/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 10485760 10485760 bytes
Max core file size 10737418240 10737418240 bytes
Max resident set unlimited unlimited bytes
Max processes 16384 16384 processes
Max open files 65536 65536 files
Max locked memory unlimited unlimited bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 2061613 2061613 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
root@bsdccdb01db01[/root]#
3.检查容器的druid连接池的参数设置和确认ojdbc的版本,怀疑连接池设置的超时错误,没有看到相应的超时设置。
4.检查容器的vm和数据库主机的超时设置均为标准的900s,没有不一致的情况。
5.检查listener.ora和sqlnet.ora文件无异常发现,根据metalink上建议增加了
INBOUND_CONNECT_TIMEOUT_LISTENER_TCC1=120
SQLNET.INBOUND_CONNECT_TIMEOUT = 120
也无效果。
6.检查系统的信号量相关参数配置
cat /proc/sys/kernel/sem
10240 83886080 4096 8192
root@bsdccdb02db01[/root]# ipcs -ls
------ Semaphore Limits --------
max number of arrays = 8192
max semaphores per array = 10240
max semaphores system wide = 83886080
max ops per semop call = 4096
semaphore max value = 32767
root@bsdccdb01db01[/root]# ipcs -s
------ Semaphore Arrays --------
key semid owner perms nsems
0x2a353928 7 grid 600 364
0xcb79b400 41 oracle 600 9004
0x776394f8 45 oracle 600 10240
0x776394f9 46 oracle 600 10240
root@bsdccdb01db01[/root]#
7.由于环境合设置上面部署多套Oracle数据库实例资源,而此现场是按照6000W用户规模来进行压测,导致数据库链接数量非常庞大,导致系统的sem的设置不足导致资源不足,调整sysctl.conf文件中的sem设置,重新生效后
数据库不再提示12518错误。
root@bsdccdb01db01[/root]# cat /proc/sys/kernel/sem
20480 83886080 4096 819
root@bsdccdb01db01[/root]#
root@bsdccdb01db01[/root]# ipcs -ls
------ Semaphore Limits --------
max number of arrays = 8192
max semaphores per array = 20480
max semaphores system wide = 83886080
max ops per semop call = 4096
semaphore max value = 32767
root@bsdccdb01db01[/root]# ipcs -s
------ Semaphore Arrays --------
key semid owner perms nsems
0x2a353928 7 grid 600 364
0xcb79b400 41 oracle 600 9004
0x776394f8 45 oracle 600 10240
0x776394f9 46 oracle 600 10240