풀 라이브러리 HikaricP에 연결된 MBean(JMX) 가져오기 및 표시

11342 단어 apache-camelHikariCP
개시하다
Hikari CP는 고속 연결 수영장 창고에서 인기가 많은 것 같아요.
HikaricP의 수영장에 있는 정보는 JMX를 통해 얻을 수 있다.얻을 수 있는 정보는 다음과 같다.
  • 유휴 연결 수
  • 활성 접속 수
  • 총 연결 수(유휴 + 활성)
  • 연결을 기다리는 스레드 수
  • MBean을 얻기 위해 설정을 변경합니다.
    HikaricP는 기본적으로 MBean을 가져올 수 없으므로 다음 두 설정을 추가합니다.
  • poolName(기본값: auto-generated)
    logging 및 JMX 관리 출력의 pool 이름을 지정합니다.
  • register Mbeans(기본값: 가짜)
    MBean 등록 여부를 결정합니다.
  • Spring XML DSL로 DataSource를 설정하면 다음 두 줄만 추가됩니다.
            <property name="registerMbeans" value="true" />
            <property name="poolName" value="testHikariPool" />
    
    추가 설정 예는 다음과 같다.
        <bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
            <property name="jdbcUrl" value="jdbc:postgresql://192.168.20.71:5432/testdb" />
            <property name="driverClassName" value="org.postgresql.Driver" />
            <property name="minimumIdle" value="10" />
            <property name="maximumPoolSize" value="100" />
            <property name="connectionTimeout" value="30000" />
            <property name="idleTimeout" value="600000" />
            <property name="maxLifetime" value="1800000" />
            <property name="username" value="postgres" />
            <property name="password" value="postgres" />
            <property name="connectionInitSql" value="SELECT 1" />
            <!-- <property name="connectionTestQuery" value="SELECT 1" />  --><!-- connectionTestQueryは非推奨 -->
            <property name="validationTimeout" value="5000" />
            <property name="registerMbeans" value="true" />
            <property name="poolName" value="testHikariPool" />
        </bean>
    
        <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"
            destroy-method="close">
            <constructor-arg ref="hikariConfig" />
        </bean>
    
    JMX로 가져오기 및 표시
    hawtio라는 웹 콘솔을 사용하여 Mbean의 정보를 표시합니다.
    Joconsole에서도 마찬가지로 보일 수 있습니다.

    hawtio라면 아래의 도표로 표시할 수 있습니다(잘 보이지는 않지만!).

    현재의 연결수 등은 다음과 같다.

    HikaricP의 설정 정보는 다음과 같습니다.

    수영장의 연결 수는 아무래도 설정된 후에도 성능 문제를 일으킬 것 같다.성능에 문제가 생겨도 감시가 없으면 플린이 문제라는 것을 발견하기 어렵다.
    개발 중에도 접속수를 확보할 수 있다면 편리할 텐데, 생산 환경에서도 모니터링하는 게 좋다.JMX를 통해 취득할 수 있기 때문에 자빅스 등을 통해서도 모니터링이 가능하다.
    참조: Apache Camel의 프로세서에서 데이터 소스를 가져올 때 코드는 다음과 같습니다.
    @Component
    public class InsertSql implements Processor {
    
        @Resource
        private CamelContext context;
    
        private Logger logger = LoggerFactory.getLogger("sample.CreateDataProcessor");
    
        private String sql = "insert into log_tbl(id, msg1, msg2, insert_time) values(logkey_seq.NEXTVAL, ?, ?, current_timestamp)";
    
        private Faker faker = new Faker(new Locale("ja_JP"));
    
        @Override
        public void process(Exchange exchange) throws Exception {
    
            HikariDataSource ds = (HikariDataSource)context.getRegistry().lookupByName("dataSource");
    
            try (Connection con = ds.getConnection();
                    PreparedStatement ps = con.prepareStatement(sql);) {
                ps.setString(1, faker.lorem().sentence(3));
                ps.setString(2, faker.lorem().sentence(5));
    
                logger.info("insert process");
                try (ResultSet rs = ps.executeQuery();) {
                    con.commit();
                }
            } catch (SQLException e) {
                logger.error(e.getMessage(), e);
            }
        }
    }
    
    /* DDLは以下のとおり
    CREATE TABLE log_tbl
     (
     id number NOT NULL,
     msg1 varchar2(128),
     msg2 varchar2(128),
     insert_time timestamp
     );
    */
    
    참고 자료
    MBean (JMX) Monitoring and Management
    https://github.com/brettwooldridge/HikariCP/wiki/MBean-(JMX)-Monitoring-and-Management
    세계의 일부 JDBC Connection Pool[HikaricP] 설정
    http://time-complexity.blogspot.com/2015/03/db-connection-pool-hikaricp.html

    좋은 웹페이지 즐겨찾기