Количество соединений Tomcat JDBC против netstat УСТАНОВЛЕННЫЕ соединения - PullRequest
0 голосов
/ 19 сентября 2018

В одной из наших сред есть tomcat 8 со следующей конфигурацией источника данных JDBC:

<Resource   name="jdbc/mydatasource"
            auth="Container"
            type="javax.sql.DataSource"
            factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
            driverClassName="oracle.jdbc.OracleDriver"
            url="jdbc:oracle:thin:@myhostname:1521:dbname"
            username="username"
            password="password"
            removeAbandoned="false"
            removeAbandonedTimeout="300"
            logAbandoned="true"
            initialSize="5"
            maxActive="100"
            maxIdle="100"
            minIdle="5"
            maxWait="120000"
/>

Команда Netstat возвращает следующие результаты:

netstat -anu | grep ${pid}| grep ESTABLISHED | grep ${myhostname}:1521 | wc -l

55

Thisрезультат остается стабильным в течение нескольких дней.

В то же время я отслеживаю атрибуты источника данных Tomcat через JMX:

numActive = 0

numIdle = 5

Этирезультаты также остаются стабильными в течение нескольких дней.

Похоже, tomcat создает пул соединений JDBC с начальным размером 5 соединений, сохраняет количество незанятых соединений на уровне 5, но по некоторым причинам количество установленных соединений, показанных с помощью netstat, равно 11в разы больше.

Когда minIdle = "5" в context.xml и JMX показывает numActive + numIdle = 5, netstat также должен показывать 5 установленных соединений, не так ли?

Полагаю, что покаПоддержка пула JDBC Tomcat постоянно открывает и закрывает соединения с базой данных, которые остаются в состоянии ESTABLISHED с точки зрения netstat до тех пор, пока не будут удалены.pped by database.

Мой вопрос: как изменить конфигурацию источника данных tomcat, чтобы вывод netstat соответствовал этой конфигурации?

Заранее большое спасибо.

1 Ответ

0 голосов
/ 20 сентября 2018

Здесь есть несколько вещей, на которые следует обратить внимание:
1) Ваша команда netstat ищет только UDP-соединения (-u), а это не то, что вам нужно.Вместо этого используйте:

netstat -ant | grep -c "${myhostname}:1521.*ESTABLISHED"

# -ant : all, numerical outptut, TCP connections
# grep -c : returns count of matches
# no need to grep PID unless you have more than one tomcat instance,
#  just matching host:1521 is enough.

2) Изменяются ли локальные порты на установленных соединениях?Если да, то соединения активно открываются и закрываются средствами обслуживания пула.
3) Правильно ли сконфигурирован DBCP JMX?Возможно, вы отслеживаете это и не то, что вам нужно.

Для непрерывного отслеживания изменений каждую 1 секунду использования:

watch -n1 "netstat -ant | grep ':1521.*ESTABLISHED' | nl | tail -n 5"
    11  tcp        0      0 192.168.1.7:50890       172.17.0.23:1521     ESTABLISHED
    12  tcp        0      0 192.168.1.7:58192       172.17.0.23:1521       ESTABLISHED
    13  tcp        0      0 192.168.1.7:54224       172.17.0.23:1521        ESTABLISHED
    14  tcp        0      0 192.168.1.7:34500       172.17.0.23:1521     ESTABLISHED
    15  tcp        0      0 192.168.1.7:54888       172.17.0.23:1521      ESTABLISHED
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...