Chris, below is the method responsible for returning the data to the service api, and its returned from service to the Rest controller
public MenuList getMenuMobileListNormalizedCombo(long a, long b, boolean c, long d) throws Exception { Connection con = null; CallableStatement callableStatement = null; ResultSet rs = null; ResultSet rs1 = null; MenuList menuList = new MenuList(); try { con = connectionManager.getConnetion(); con.setAutoCommit(false); callableStatement = con.prepareCall("call appschema.menu_pkg$get_menu_items(?,?,?,?,?,?)"); callableStatement.setLong(1, a); if (c == 0) callableStatement.setNull(2, Types.BIGINT); else callableStatement.setLong(2, b); callableStatement.setString(3,"Y"); if(d == 0) callableStatement.setString(4, null); else callableStatement.setLong(4, d); callableStatement.setNull(5, Types.OTHER); callableStatement.setNull(6, Types.OTHER); callableStatement.registerOutParameter(5, Types.OTHER); callableStatement.registerOutParameter(6, Types.OTHER); callableStatement.setFetchSize(5); callableStatement.execute(); rs = (ResultSet) callableStatement.getObject(5); rs1 = (ResultSet) callableStatement.getObject(6); MenuMobile menuMobile; try { while (rs.next()) { menuMobile = new MenuMobile(); //setters removed menuMobileList.add(menuMobile); } MenuCombo menuCombo; while (rs1.next()) { //setters removed menuComboList.add(menuCombo); } menuList.setMenuComboList(menuComboList); menuList.setMenuMobileList(menuMobileList); } catch (SQLException e) { LOG.error(e.getLocalizedMessage(), e); } con.commit(); con.setAutoCommit(true); } catch (SQLException e) { LOG.error(e.getLocalizedMessage(), e); throw e; } finally { if (rs != null) rs.close(); if (rs1 != null) rs1.close(); if(callableStatement!=null)callableStatement.close(); if(con!=null)con.close(); } return menuList; } Below is the signature of the rest controller api method @RequestMapping(value = "/m_listAllItems", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"}) @ResponseBody public Object m_listAllMenus(@RequestParam("a") long a, @RequestParam("b") String b, @RequestParam("c") String c, @RequestParam(value = "d",defaultValue ="0") String d) { Object menuList = new Object(); try { menuList = menuManagmentService.listAll(a, b, c, d); //this service calls the dao in the service class } catch (Exception e) { LOG.error(e.getLocalizedMessage(), e); } return menuList; } On Thu, Jun 10, 2021 at 8:10 AM Ayub Khan <ayub...@gmail.com> wrote: > Seeing client write waits on postgresql as attached in the image. Is there > any bottle neck which is causing the client write waits on postgresql ? > > Below is the test setup > > Jmeter-->(load balanced tomcat on ec2 instances)---->rds read replicas > > All these are running on different ec2 instances in AWS cloud in the same > region > > below is the config of the http connector on tomcat: > > <Connector port="8080" > protocol="org.apache.coyote.http11.Http11NioProtocol" > connectionTimeout="120000" maxThreads="50000" > maxConnections="50000" > URIEncoding="UTF-8" > redirectPort="8443" /> > > Below are the specs of the server: > > Ec2 instance which is running tomcat 8.5 > > c5.9x large > 36 vpcu > 72GB memory > 10GBPS network > EBS band width 9500 > > > postgresql RDS db.r6g.16xlarge > > 512 GB memory > 64 VCPU > 25 Gibs network > AWS Gravitron cpu > > --Ayub > > -- -------------------------------------------------------------------- Sun Certified Enterprise Architect 1.5 Sun Certified Java Programmer 1.4 Microsoft Certified Systems Engineer 2000 http://in.linkedin.com/pub/ayub-khan/a/811/b81 mobile:+966-502674604 ---------------------------------------------------------------------- It is proved that Hard Work and kowledge will get you close but attitude will get you there. However, it's the Love of God that will put you over the top!!