AnsweredAssumed Answered

Background service "Out of memory" error

Question asked by fabricio.de.marchi on Oct 12, 2010
Latest reply on Dec 2, 2010 by Patrick Cooper
Hi All,

I am having an "out of memory" error in the background servers after lots of processes that use this GEL script had ran:
<gel:script xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:core="jelly:core" xmlns:file="jelly:com.niku.union.gel.FileTagLibrary"


xmlns:gel="jelly:com.niku.union.gel.GELTagLibrary" xmlns:soap="jelly:com.niku.union.gel.SOAPTagLibrary"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sql="jelly:sql"
xmlns:xog="http://www.niku.com/xog" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jxml="jelly:xml">

<gel:setDataSource dbId="Niku"/>
<!-- ########################################### -->
<!-- Get HOST information -->








<sql:query var="get_host_info">








select value from app_niku.cmn_config where name = 'properties.xml'





</sql:query>











<!-- Loop through the SDLC Project Questions -->







<core:forEach items="${get_host_info.rowsByIndex}" trim="true" var="row_get_host_info">



<core:set value="${row_get_host_info[0]}" var="properties_xml" />





</core:forEach>









<jxml:parse var="properties_value" xml="${properties_xml.getAsciiStream()}"/>




<core:set var="currenthost" value='${properties_value.getRootElement().element("webServer").attributeValue("schedulerUrl")+"/niku/xog"}'/>

<!-- ########################################### -->






<!-- Query to get SDLC Project Questions information -->






<sql:query var="project_query">








select sdlc.ID,









sdlc.CREATED_DATE,









sdlc.CREATED_BY,









sdlc.LAST_UPDATED_DATE,








sdlc.LAST_UPDATED_BY,









sdlc.PARTITION_CODE,









sdlc.NAME,










sdlc.CODE,










invs.CODE AS INV_CODE,









sdlc.ODF_CNCRT_PARENT_ID,








sdlc.DELL_SDLC_TALRG_CODE,








sdlc.DELL_SDLC_DATE,









sdlc.DELL_SDLC_PHASE,









sdlc.DELL_SDLC_DESC,









sdlc.DELL_SDLC_ID,









sdlc.DELL_SDLC_PROC_AREA,








sdlc.DELL_SDLC_STATUS,









sdlc.DELL_SDLC_TALRG_STMT,








sdlc.DELL_SDLC_PRJ_UPDATE 








from app_niku.odf_ca_dell_sdlc_prj_quest sdlc,app_niku.inv_investments invs




where sdlc.odf_parent_id = ${gel_thisproject}







and sdlc.odf_parent_id = invs.id




</sql:query>

<!-- Loop through the SDLC Project Questions -->







<core:forEach items="${project_query.rowsByIndex}" trim="true"

<core:set value="${row_project_query[5]}" var="sdlc_partition_code" />






<core:set value="${row_project_query[6]}" var="sdlc_name" />







<core:set value="${row_project_query[7]}" var="sdlc_code" />







<core:set value="${row_project_query[8]}" var="sdlc_odf_parent_id" />






<core:set value="${row_project_query[9]}" var="sdlc_odf_cncrt_parent_id" />





<core:set value="${row_project_query[12]}" var="sdlc_dell_sdlc_phase" />






<core:set value="${row_project_query[13]}" var="sdlc_dell_sdlc_desc" />






<core:set value="${row_project_query[14]}" var="sdlc_dell_sdlc_id" />






<core:set value="${row_project_query[15]}" var="sdlc_dell_sdlc_proc_area" />





<core:set value="${row_project_query[16]}" var="sdlc_dell_sdlc_status" />






<core:set value="${row_project_query[17]}" var="sdlc_dell_sdlc_talrg_stmt" />




<core:set value="${row_project_query[18]}" var="sdlc_dell_sdlc_prj_update" />



<!-- Updating each SDLC Project Questions in order to fire up Process that runs when this is updated -->



<!-- SOAP envelope to XOG IN inline (not using a file) -->






<soap:invoke endpoint="${currenthost}" var="result">






<soap:message>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xog="http://www.niku.com/xog">
<soapenv:Body>
<xog:Login xmlns:xog="http://www.niku.com/xog">
<xog:Username>u1</xog:Username>
<xog:Password>p1</xog:Password>
</xog:Login>

<!-- start of XOG script -->









<NikuDataBus xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/nikuxog_customObjectInstance.xsd">
<Header action="write" externalSource="NIKU" objectType="customObjectInstance" version="8.1.0.03.4373"/>



<customObjectInstances objectCode="dell_sdlc_prj_quest">






<instance instanceCode="${sdlc_code}" objectCode="dell_sdlc_prj_quest" parentInstanceCode="${sdlc_odf_parent_id}" parentObjectCode="project">

<CustomInformation>

<ColumnValue name="partition_code">${sdlc_partition_code}</ColumnValue>



<ColumnValue name="name">${sdlc_name}</ColumnValue>






<ColumnValue name="code">${sdlc_code}</ColumnValue>






<ColumnValue name="odf_parent_id">${sdlc_odf_parent_id}</ColumnValue>



<ColumnValue name="odf_cncrt_parent_id">${sdlc_odf_cncrt_parent_id}</ColumnValue>


<ColumnValue name="dell_sdlc_prj_update">1</ColumnValue>






<ColumnValue name="dell_sdlc_status">${sdlc_dell_sdlc_status}</ColumnValue>


<ColumnValue name="dell_sdlc_talrg_stmt">${sdlc_dell_sdlc_talrg_stmt}</ColumnValue>


<ColumnValue name="dell_sdlc_phase">${sdlc_dell_sdlc_phase}</ColumnValue>


<ColumnValue name="dell_sdlc_desc">${sdlc_dell_sdlc_desc}</ColumnValue>



<ColumnValue name="dell_sdlc_id">${sdlc_dell_sdlc_id}</ColumnValue>



<ColumnValue name="dell_sdlc_proc_area">${sdlc_dell_sdlc_proc_area}</ColumnValue>

</CustomInformation>
</instance>









</customObjectInstances>








</NikuDataBus>










<!-- end of XOG script -->








</soapenv:Body>








</soapenv:Envelope>









</soap:message>








</soap:invoke>









</core:forEach>









</gel:script>
It is a big script, but basically, it gets our production environment Clarity URL and uses to XOG ON objects using a SOAP call. The objects that are being XOG IN are the result of a query, so there are multiple objects being XOG IN when that process runs.

My question is, is there anything here, like a connection I should close, or after each XOG IN I should clear something in order to not have a out of memory issue?

The issue does not happens when only 1 instance of this process runs, it happens when multiple instances of this process runs at the same time. This happens frequently in our environment and whenever we have the "out of memory" error we have to restart the background service in order for it to start processing again.

Let me know if you need more details on this.

Thanks

Fabricio

Outcomes