[JAVA] AWS und On-Pres-Zeitverzögerung

Überprüfungsumgebung Red Hat Enterprise Linux release 8.1 (Ootpa) Tomcat-9.0.30 PostgreSQL 10.7 Aurora PostgreSQL 10.6

Ausführungsergebnis des folgenden Programms. Durchschnittswert von 10 Läufen. Die Anzahl der Datensätze für die Overhead-Überprüfung beträgt mehrere. Lokal unter Linux: 541 Mikrosekunden Lokal im Computer (VM-Host-Windows und VM-Gast-Linux): 988 Mikrosekunden Heimmaschine (Yokohama), AWS Region Tokio (Aurora PostgreSQL) Remote: 7304 Mikrosekunden

Im Fall von Oracle ist die Abrufgröße des JDBC-Treibers klein (Standard 10), daher ist eine Optimierung erforderlich. Sie sollte entsprechend den Antwortanforderungen der Anwendung erhöht werden. In einer bestimmten Umgebung waren es 38 ms (Ping-Antwortzeit) für On-Pres und AWS, daher sollte der Fall berücksichtigt werden, in dem der Protokoll-Overhead entsprechend groß ist.

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);
	}

}

Zusätzliche Hinweise zum Überprüfen des tatsächlichen Computers direkt von Tomcat in Eclipse Platzieren Sie context.xml unter 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>

Für Aurora die folgenden Endpunkte (nach Überprüfung der Operation gelöscht) url="jdbc:postgresql://database-1-instance-1.cofxoo0c8wlr.ap-northeast-1.rds.amazonaws.com:5432/postgres"

Recommended Posts

AWS und On-Pres-Zeitverzögerung
Datum (und Uhrzeit
[Schienen] Startzeit und Endzeit speichern
AWS SDK für Java 1.11.x und 2.x.
[MySQL] [Java] Datum und Uhrzeit empfangen