[JAVA] AWS et délai de mise sous tension

Environnement de vérification Red Hat Enterprise Linux release 8.1 (Ootpa) Tomcat-9.0.30 PostgreSQL 10.7 Aurora PostgreSQL 10.6

Résultat de l'exécution du programme suivant. Valeur moyenne de 10 courses. Le nombre d'enregistrements est de plusieurs pour la vérification des frais généraux. Local sous Linux: 541 microsecondes Local sur la machine (hôte VM Windows et hôte VM Linux): 988 microsecondes Machine domestique (Yokohama), région AWS Tokyo (Aurora PostgreSQL) à distance: 7304 microsecondes

Dans le cas d'Oracle, la taille de récupération du pilote JDBC est petite (par défaut 10), un réglage est donc nécessaire. Il doit être augmenté en fonction des exigences de réponse de l'application. Dans un certain environnement, il était de 38 ms (temps de réponse ping) pour on-pres et AWS, donc le cas où la surcharge de protocole est proportionnellement importante doit être pris en compte.

package test;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.annotation.Resource;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

/**
 * Servlet implementation class TestServlet
 */
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
 
	@Resource(name = "jdbc/postgres")
	private DataSource ds;
	
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TestServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
        Connection con = null;
        long start = 0;
        long end = 0;       

        try {
            con = ds.getConnection();
            //start = System.currentTimeMillis();
            start = System.nanoTime();
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery("select id from test2");
            int recordCount = 0;
            while (rs.next()) {
                out.println(rs.getInt("id"));
                recordCount++;
            }
            out.println("<br>");
            out.print("recordCount:");
            out.println(recordCount);
            out.println("<br>");
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            try {
                con.close();
                end = System.nanoTime();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        out.print("time:");
        out.print((end - start)/1000);
        out.println(" micro sec");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

Notes supplémentaires pour vérifier la machine réelle directement à partir de Tomcat inclus dans Eclipse Placez context.xml sous WebContent / META-INF.

<Context>

    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->

    <Manager className="org.apache.catalina.session.PersistentManager"
        maxIdleBackup="1"
        minIdleSwap="0"
        maxIdleSwap="0"
        processExpiresFrequency="1"
        saveOnRestart='true'
        >
        <Store className="org.apache.catalina.session.JDBCStore"
                connectionURL="jdbc:postgresql://localhost:5432/tomcat?user=postgres&amp;password=postgres"
                driverName="org.postgresql.Driver"
                sessionAppCol="app_name"
                sessionDataCol="session_data"
                sessionIdCol="session_id"
                sessionLastAccessedCol="last_access"
                sessionMaxInactiveCol="max_inactive"
                sessionTable="tomcat_sessions"
                sessionValidCol="valid_session"
                />
    </Manager>

    <Resource name="jdbc/postgres" auth="Container"
          type="javax.sql.DataSource" driverClassName="org.postgresql.Driver"
          url="jdbc:postgresql://192.168.80.131:5432/test"
          username="postgres" password="postgres" maxTotal="20" maxIdle="10" maxWaitMillis="-1"/>
</Context>

Pour Aurora, les points de terminaison suivants (supprimés après la vérification de l'opération) url="jdbc:postgresql://database-1-instance-1.cofxoo0c8wlr.ap-northeast-1.rds.amazonaws.com:5432/postgres"

Recommended Posts

AWS et délai de mise sous tension
Date et l'heure
[Rails] Enregistrer l'heure de début et l'heure de fin
SDK AWS pour Java 1.11.x et 2.x
[MySQL] [java] Date et heure de réception