Julian is correct. I didn't notice the try INSIDE the finally block!! That is definitely a problem.
To be clear, it's better to have the save() and the logout() in two completely different finally blocks, so that if the first one fails, the second one still runs. Best regards, Clay Ferguson [email protected] On Tue, Jan 10, 2017 at 2:56 AM, Julian Sedding <[email protected]> wrote: > 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. > > > > >
