If I read the code correctly, you only logout the session in a catch block. Assuming the code is otherwise sane, that would indicate a session leak, because most sessions are not logged out. That could also explain the gradual slowdown over two days.
You have to always logout JCR sessions that you create via repository.login(...). As Clay mentioned, you should use a try..finally construct with logout in the finally block. Regards Julian On Tue, Jan 10, 2017 at 6:18 AM, Clay Ferguson <[email protected]> wrote: > * First determine if the time is being spent in the streaming, or the JCR > saving, so you know what problem to solve > > * Use System.currentMillis() or whatever to capture the begin+end times of > different sections, and subtract them to get the time. Then keep > a running total of those times. Then at end log out the total times, to see > what part is slow (low tech profiler!) > > * Close your stream in a finally block. > > * User Buffered stream (input stream) > > * Don't save 1000s of times into the same session if you can avoid it. > Create new sessions every 100th time or so and close out the previous > session to be sure > it isn't draining resources. > > * Print amount of free memory after calling GC(), like every 100th file, to > see if it's leaking, running low. (again low-tech profiler!) > > > Best regards, > Clay Ferguson > [email protected] > > > On Mon, Jan 9, 2017 at 12:03 PM, ravindar.singh > <[email protected]> wrote: >> >> Please check the below code. correct me if any thing wrong. >> >> After restarting the server it is quit normal then 1 day later it is >> taking >> 2 min to upload the file. >> >> private void contentStroe(UploadParameters repContent, List<ProjectProp> >> configParams, >> String workspace, String table) throws Exception{ >> Session repSession = null; >> Repository repository = null; >> try{ >> String path = repContent.getModule(); >> Map<String, Object> nodeProps = repContent.getParams(); >> for(ProjectProp prop: configParams){ >> if("1".equals(prop.getMppFolderYn())){ >> Object value = >> nodeProps.get(prop.getMppParameterName()); >> if(value!=null) >> path += "/" + value.toString(); >> } >> } >> logger.info("Path => "+path); >> Calendar cal = Calendar.getInstance(); >> DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd >> HH:mm:ss"); >> repository = getRepository(); >> repSession = repository.login(new SimpleCredentials("admin", >> "admin".toCharArray()), workspace); >> Node folderNode = repSession.getRootNode(); >> String[] docPath = path.split("/"); >> long docSize = 0; >> String docExtn = "", docVersion = ""; >> for(String nodes : docPath){ >> if (folderNode.hasNode(nodes)) { >> folderNode = folderNode.getNode(nodes); >> } else { >> boolean versioned = isVersioned(folderNode); >> if(versioned) >> folderNode.checkout(); >> Node subFolderNode = folderNode.addNode(nodes); >> subFolderNode.addMixin("mix:referenceable"); >> subFolderNode.addMixin("mix:versionable"); >> subFolderNode.setProperty("Created", >> dateFormat.format(cal.getTime())); >> subFolderNode.setProperty("CreatedBy", >> repContent.getUpdUser()); >> repSession.save(); >> if(versioned) >> folderNode.checkin(); >> subFolderNode.checkin(); >> folderNode = folderNode.getNode(nodes); >> } >> } >> >> if(repContent.getUpdFile()!=null){ >> String name = repContent.getUpdFileName(); >> docExtn = name.substring(name.lastIndexOf(".")+1); >> } >> repContent.setDocName(repContent.getDocName()+"."+docExtn); >> logger.info("File Store >> Path=>"+path+"/"+repContent.getDocName()); >> if (folderNode.hasNode(repContent.getDocName())) { >> boolean versioned = isVersioned(folderNode); >> if(versioned) >> folderNode.checkout(); >> Node fileNode = >> folderNode.getNode(repContent.getDocName()); >> boolean fileversioned = isVersioned(fileNode); >> if(fileversioned) >> fileNode.checkout(); >> fileNode.setProperty("lastModified", >> dateFormat.format(cal.getTime())); >> fileNode.setProperty("UpdateBy", repContent.getUpdUser()); >> docSize = addRepoContents(repSession, fileNode, >> repContent, >> configParams); >> repSession.save(); >> if(versioned) >> folderNode.checkin(); >> if(fileversioned) >> fileNode.checkin(); >> VersionManager versionManager = >> repSession.getWorkspace().getVersionManager(); >> VersionHistory hist = >> versionManager.getVersionHistory("/"+path+"/"+repContent.getDocName()); >> for (VersionIterator it = hist.getAllVersions(); >> it.hasNext();) { >> Version version = (Version) it.next(); >> logger.info("Version1 Name=>"+version.getName()); >> docVersion = version.getName(); >> } >> } else { >> boolean versioned = isVersioned(folderNode); >> if(versioned) >> folderNode.checkout(); >> Node fileNode = >> folderNode.addNode(repContent.getDocName()); >> fileNode.addMixin("mix:referenceable"); >> fileNode.addMixin("mix:versionable"); >> fileNode.setProperty("Created", >> dateFormat.format(cal.getTime())); >> fileNode.setProperty("CreatedBy", >> repContent.getUpdUser()); >> fileNode.setProperty("deleteOption", "Y"); >> fileNode.setProperty("versioning", "Y"); >> docSize = addRepoContents(repSession, fileNode, >> repContent, >> configParams); >> repSession.save(); >> if(versioned) >> folderNode.checkin(); >> fileNode.checkin(); >> VersionManager versionManager = >> repSession.getWorkspace().getVersionManager(); >> VersionHistory hist = >> versionManager.getVersionHistory("/"+path+"/"+repContent.getDocName()); >> for (VersionIterator it = hist.getAllVersions(); >> it.hasNext();) { >> Version version = (Version) it.next(); >> logger.info("Version Name=>"+version.getName()); >> docVersion = version.getName(); >> } >> } >> repSession.save(); >> dao.insertDocDetails(table, repContent, configParams, >> docVersion, path, docSize, docExtn); >> } catch (Exception e) { >> throw e; >> } finally { >> if(repSession!=null){ >> try{ >> repSession.save(); >> }catch(Exception e){logger.error("Exception in Session >> Save >> {}", e);} >> *repSession.logout();* >> repSession = null; >> repository = null; >> } >> } >> } >> >> private long addRepoContents(Session repSession, Node fileNode, >> UploadParameters repContent, >> List<ProjectProp> configParams) throws Exception{ >> byte[] updFile = repContent.getUpdFileByte(); >> long res = 0; >> if(updFile!=null){ >> res = updFile.length; >> ByteArrayInputStream fileContentStream = new >> ByteArrayInputStream(updFile); >> Binary fileContent = >> repSession.getValueFactory().createBinary(fileContentStream); >> fileNode.setProperty("mimeType", >> repContent.getUpdFileContentType()); >> fileNode.setProperty("size", res); >> fileNode.setProperty("data", fileContent); >> fileContentStream.close(); >> fileNode.setProperty("fileName", repContent.getUpdFileName()); >> logger.info("File Name: "+repContent.getUpdFileName()+"; File >> Size: "+res+"; File Content Type: "+repContent.getUpdFileContentType()); >> >> fileNode.setProperty("Category", repContent.getCategory()); >> fileNode.setProperty("DocCode", repContent.getDocCode()); >> fileNode.setProperty("DocName", repContent.getDocName()); >> fileNode.setProperty("DocRemarks", repContent.getRemarks()); >> >> logger.info("Additional Params:"); >> Map<String, Object> nodeProps = repContent.getParams(); >> for (ProjectProp props : configParams) { >> Object value = nodeProps.get(props.getMppParameterName()); >> logger.info("Name: "+props.getMppParameterName()); >> logger.info("Type: "+props.getMppDataType()); >> logger.info("Value: "+value); >> if("C".equals(props.getMppDataType())){ >> fileNode.setProperty(props.getMppParameterDesc(), >> String.valueOf(value)); >> } else if("N".equals(props.getMppDataType())) { >> fileNode.setProperty(props.getMppParameterDesc(), >> Long.valueOf(value==null?"0":value.toString())); >> } else if("D".equals(props.getMppDataType())) { >> fileNode.setProperty(props.getMppParameterDesc(), >> (Calendar)value); >> } >> } >> } >> return res; >> } >> >> >> >> -- >> View this message in context: >> http://jackrabbit.510166.n4.nabble.com/Slowness-while-multiple-uploads-tp4666061p4666070.html >> Sent from the Jackrabbit - Dev mailing list archive at Nabble.com. > >
