JBoss EAP 6 On JRockit - Memory Leak
hello team.
I have memory leak problem on jboss and jrockit.
My Environment :
1. OS :
CentOS release 6.4 (Final)
2. JRockit :
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Oracle JRockit(R) (build R28.2.7-7-155314-1.6.0_45-20130329-0641-linux-x86_64, compiled mode)
3. Application Server:
JBoss EAP 6.2.0.GA
4. Application
Large EJB Application (100 and more EJB Beans (Stateless, Stateful, MDB, Timers and so on)
Everything works fine on older application server versions (4.3 , 4.2)
But now I have Problem
Of course I know that problem is new version - and i have discussion on JBoss forums.
but guys I have question about jrockit with you:
What is the option "Other" in memory ??
[jboss@jboss-new bin]$ jrcmd 17114 print_memusage
17114:
Total mapped 8457864KB (reserved=2983100KB)
- Java heap 3145728KB (reserved=0KB)
- GC tables 105232KB
- Thread stacks 46412KB (#threads=138)
- Compiled code 1048576KB (used=12257KB)
- Internal 1480KB
- OS 170324KB
- Other 3639056KB
- Classblocks 10496KB (malloced=9631KB #28393)
- Java class data 289536KB (malloced=192391KB #133697 in 28393 classes)
- Native memory tracking 1024KB (malloced=294KB #10)
[jboss@jboss-new bin]$
This size increases every time - and took entire amount of RAM.
Thank in Advance.
Regards,
Paata Lominadze
Not sure what the 'other' is, but it is probably best shown by using an example. By using displayMap we can display a memory map of various JVM subsystems and libraries that are loaded, including third-party libraries.
./jrcmd 4523 print_memusage displayMap
Total mapped 3984796KB (reserved=2978740KB)
- Java heap 524288KB (reserved=0KB)
- GC tables 17548KB
- Thread stacks 20276KB (#threads=39)
- Compiled code 1048576KB (used=14224KB)
- Internal 1672KB
- OS 146924KB
- Other 2092648KB
- Classblocks 7424KB (malloced=7381KB #20064)
- Java class data 124416KB (malloced=124411KB #91048 in 20064 classes)
- Native memory tracking 1024KB (malloced=118KB #10)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
OS *java r x 0x0000000000400000.( 76KB)
OS *java rw 0x0000000000612000.( 4KB)
OS *[heap] rw 0x00000000007c1000.( 132KB)
INT Poll r 0x000000007fffe000 ( 4KB)
INT Membar rw 0x000000007ffff000.( 4KB)
MSP Classblocks (1/2) rw 0x00000000df8c0000 ( 6912KB)
MSP Classblocks (2/2) rw 0x00000000dff80000 ( 512KB)
HEAP Java heap rw 0x00000000e0000000.( 524288KB)
OS *ld-2.12.so r x 0x0000003664400000.( 128KB)
OS *ld-2.12.so r 0x000000366461f000 ( 4KB)
OS *ld-2.12.so rw 0x0000003664620000 ( 4KB)
OS **ld-2.12.so rw 0x0000003664621000.( 4KB)
OS *gconv-modules.cache r 0x00007f8f2e4a0000 ( 28KB)
THREAD Stack 4630 rwx 0x00007f8f2e4a7000 ( 8KB)
THREAD Stack 4630 0x00007f8f2e4a9000 ( 12KB)
THREAD Stack 4630 rwx 0x00007f8f2e4ac000 ( 244KB)
MSP Java class data (5/37) rw 0x00007f8f2e4e9000 ( 14336KB)
MSP Java class data (9/37) rw 0x00007f8f2fa40000 ( 5888KB)
rw 0x00007f8f30000000 ( 188KB)
0x00007f8f3002f000 ( 65348KB)
rw 0x00007f8f34000000 ( 132KB)
0x00007f8f34021000 ( 65404KB)
rw 0x00007f8f38000000 ( 412KB)
0x00007f8f38067000.( 65124KB)
MSP Java class data (10/37) rw 0x00007f8f3c034000 ( 34048KB)
rw 0x00007f8f3e174000 ( 8200KB)
MSP Java class data (11/37) rw 0x00007f8f3e976000 ( 256KB)
OS *libhpi.so rw 0x00007f8fb37fc000 ( 8KB)
OS **libhpi.so rw 0x00007f8fb37fe000 ( 4KB)
CODE Compiled code rwx 0x00007f8fb37ff000 ( 64KB)
CODE Compiled code rwx 0x00007f8fb380f000 ( 128KB)
CODE Compiled code rwx 0x00007f8fb382f000 ( 64KB)
MSP Java class data (37/37) rw 0x00007f8ff83a1000 ( 512KB)
GC Modified Union Set (committed) rw 0x00007f8ff8421000 ( 132KB)
GC Card table rw 0x00007f8ff8442000 ( 1024KB)
GC Object bits (committed) rw 0x00007f8ff8542000 ( 8196KB)
Here
- thread is thread related (such as thread stacks)
- int, internal use (such as pointer pages)
- heap, chunk used by JRockit for the Java heap
- os, mapped directly from the operating system, such as third party DLLs or shared objects
- msp, memory space. a memory space is a native heap with a specific purpose, for example native memory allocation inside the JVM
- gc, garbage collection related, for example live bits
- code, compiled code
The 'other' memory space looks to me (from the blank entries in the above print-out) like they are a memory pages to are still not used. When the JVM starts it mappes an amount of memory. To my knowledge JRockit uses mmap (mmap(2) - Linux manual page), which creates a new mapping in the virtual address space. JRockit reserves an amount of memory (Java Heap (heap where your object instances go) + its own runtime (all the others)).
To see where the growth is in the various memory spaces, you can use 'print_memusage baseline', after which you can execute print_memusage again, for example,
./jrcmd 4523 print_memusage scale=M
4523:
Total mapped 3896MB +4MB (reserved=2905MB -3MB)
- Java heap 512MB (reserved=0MB)
- GC tables 17MB
- Thread stacks 19MB (#threads=39)
- Compiled code 1024MB (used=14MB +1MB)
- Internal 1MB
- OS 143MB
- Other 2043MB
- Classblocks 7MB (malloced=7MB #20596 +532)
- Java class data 126MB +4MB (malloced=125MB +4MB #93640 +2592 in 20596 classes)
- Native memory tracking 1MB (malloced=0MB #20 +10)
Note the additional column that prints out the difference in memory usage in relation to the baseline. You can also monitor native allocations by using trace_alloc_sites, memory allocations can then be displayed with different levels of detail using the level argument.
./jrcmd 4523 print_memusage trace_alloc_sites=true
4523:
Total mapped 3989660KB +4864KB (reserved=2974732KB -4008KB)
- Java heap 524288KB (reserved=0KB)
- GC tables 17548KB
- Thread stacks 20276KB (#threads=39)
- Compiled code 1048576KB (used=15265KB +1040KB)
- Internal 1672KB
- OS 146924KB
- Other 2092648KB
- Classblocks 7680KB +256KB (malloced=7669KB +287KB #20596 +532)
- Java class data 129024KB +4608KB (malloced=128967KB +4555KB #93640 +2592 in 20596 classes)
- Native memory tracking 1024KB (malloced=236KB +118KB #20 +10)
./jrcmd 4523 print_memusage level=3
4523:
Total mapped 3989660KB +4864KB (reserved=2974732KB -4008KB)
- Java heap 524288KB (reserved=0KB)
- GC tables 17548KB
- Thread stacks 20276KB (#threads=39)
- Compiled code 1048576KB (used=15265KB +1040KB)
- Internal 1672KB
- OS 146924KB
- Other 2092648KB
- Classblocks 7680KB +256KB (malloced=2KB -7379KB #4 -20060) Not fully traced
- Java class data 129024KB +4608KB (malloced=26KB -124385KB #16 -91032 in 20596 classes) Not fully traced.
- Native memory tracking 1024KB (malloced=118KB #10) Not fully traced.
gather_memorymap_database memtrace.c: 206 91KB +91KB (#1 +1)
gather_memory_usage osal_mspace.c:5142 7KB +7KB (#4 +4)
msGatherMSpacesUsageDatabase osal_mspace.c:6128 2KB +2KB (#1 +1)
msGatherMSpacesUsageDatabase osal_mspace.c:6134 16KB +16KB (#1 +1)
Note this is more on the JVM level, in your case in might be beneficial to investigate what is happening on the java heap. By using print_object_summary you can get insight how memory on the heap is used on a per-class basis. To get to the bottom of where the memory leak is you can use the memory-leak-detector (an example of its use can be found here Middleware Snippets: Fast, Faster, JRockit). You can also obtain a heapdump that can be analyzed by using for example MAT (see for an example here Middleware Snippets: Visualizing Class Loading). To obtain a heapdump you can run the command, for example,
[weblogic@machine1 bin]$ ./jrcmd 4523 runsystemgc full=true fullcompact=true
4523:
[weblogic@machine1 bin]$ ./jrcmd 4523 hprofdump filename=/home/weblogic/dump.hprof
4523:
Wrote dump to /home/weblogic/dump.hprof
Note that this first issues a full GC by using the runsystemgc command.
Similar Messages
-
JBoss... Memory leak
Hi All,
We are observing memory leak while running our application on JBoss 4.0.2. We attached the profiling tool - JProfiler to trace the memory leak and we found that the class[] (Proxy classes) is increasing drastically which is not getting garbage collected.
The "HeapWalker" shows that EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run() has allocated some memory which is not being freed.
The application uses MDBs extensively and the JMS server is configured to NullPersistance. We are closing all the Queue connection, session and sender properly.
What could be the possible cause for this leak?
Thanks in advance,
Nirav.Nirav...
I am new to jboss. Our application has a memory leak on the similar issue. some UIL2 threads keep openning another copy of themselves about every minute. An example of such thread follows on the bottom of my message.
My question is this: Where do i change the connection factory type to "java:/ConnectionFactory"? I searched all of my jboss config files for "RMIConnection" and did not fing any references.
If you can offer any advice, it would be really appreciated.
thanks
julia
Name: UIL2(SocketManager.MsgPool@f34a08 client=192.168.30.237:8093)#1
State: TIMED_WAITING on EDU.oswego.cs.dl.util.concurrent.LinkedNode@eaabad
Total blocked: 0 Total waited: 2
Stack trace:
java.lang.Object.wait(Native Method)
EDU.oswego.cs.dl.util.concurrent.SynchronousChannel.poll(SynchronousChannel.java:353)
EDU.oswego.cs.dl.util.concurrent.PooledExecutor.getTask(PooledExecutor.java:723)
EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:747)
java.lang.Thread.run(Thread.java:619) -
How to configure license file for Memory Leak tool and WL Server 9.2?
(I posted to general JRockit forum before realizing existence of this forum which is probably more applicable.)
Here's our problem:
Running latest version of WL 9.2 MP3 and JRockit Mission Control 3.0.1
Able to run Mission Control, and connect to the WL Server and to run View Console with no problems.
I can't get Memory Leak tool to run because it complains about needing a license file.
First I tried with off the shelf WL 9.2 MP3.
Get error:
A license for Memory Leak Detector could not be found on the JRockit at (1.5) weblogic.Server (192).
Error: Can not find component Memory Leak Detector for JRockit * in the license file. Please check http://www.jrockit.com/license for license updates.
So I downloaded license file from JRockit download site - wls92.zip. It contains several files, but no clear instructions on what to do with these files. I copied one of these files "LIC-WLSP92.txt" to my JRockit home as C:\bea\JROCKI~1\jre\license.bea
Tried again. Restarted WL server. Restarted JRockit Mission Control.
Get error: A license for Memory Leak Detector could not be found on the JRockit at (1.5) weblogic.Server (3052).
The license file does not exist at: C:\bea\JROCKI~1\jre\license.bea
Any advise on how to install license or who to contact for help?Installed Mission Control 3.0.3.
Got following message when I attempted to run Memory Leak:
A license for Memory Leak Detector could not be found on the JRockit at (1.5) weblogic.Server (192).
Error: Can not find component Memory Leak Detector for JRockit * in the license file.
Please check http://www.jrockit.com/license for license updates.
I believe that we're using the latest downloads of WebLogic 9.2.x and JRockit.
WebLogic is running using 9.2.3 and JRockit build R27.4.0-90_CR358515-94243-1.5.0_12-20080118-1154-windows-ia2
Contents of C:\bea\jrockit_150_12\jre\license.bea:
<?xml version="1.0" encoding="ISO-8859-1"?>
<bea-licenses>
<license-group format="1.0" product="JRockit" release="*">
</license-group>
</bea-licenses>
Could WebLogic be misconfigured?
Any diagnostics to help figure out the licensing?
Any other ideas? -
Hi All,
I had posted this query to couple of other groups ..I am still struglling with this issue..Hope someone will help me out here
I have very basic application which uses DataSerives over RTMP channel to populate dataGrid , I have not used any user defined component.
This application has got LOAD data and Remove data Button just to simulate the actual application
What happens , when I click on LOAD data , It loads the data from server(JBOSS) then I Remove all the data and force the GC to run
If I continuously keep loading and removing the data , memory goes up every time and after some times It reaches to threshold and finally crashes the Browser.
In actual application as soon as user logs in a dedicated DS destination is created..
private function createDestination(destName:String):void{
var remoteService:RemoteObject = new RemoteObject("DestinationManager");
remoteService.addEventListener(ResultEvent.RESULT, resultHandler,false,0,true);
var operation:AbstractOperation = remoteService.getOperation("createDestination");
operation.send(destName);
var cs:ChannelSet = new ChannelSet();
var rtmpChannel:RTMPChannel = ServerConfig.getChannel("my-rtmp") as RTMPChannel;
cs.addChannel(rtmpChannel);
tradeService = new DataService() ;
tradeService.destination=destName;
tradeService.channelSet = cs;
Now when user hits on Load data button to load the trade data ...
public function loadData():void
var remoteService:RemoteObject = new RemoteObject("filterRemoteVO");
var operation:AbstractOperation = remoteService.getOperation("loadData");
tradeService.fill(tradeCollection);
operation.send(rowData.text ,GUIID);
tradeList.dataProvider = tradeCollection;
Remove Data hit I clean all the resource and released collection :-
public function removeAll():void{
if(tradeList.dataProvider){
tradeCollection.source = new Array();
tradeList.dataProvider.source = new Array();
tradeList.dataProvider = null;
tradeService.release();
tradeService.releaseCollection(tradeCollection);
tradeService.channelSet.disconnectAll();
tradeService.disconnect();
tradeService.logout();
System.gc();
Except these 3 function I don't have any code which could cause memory leak.
I m using
LCDS 2.5
Flex 3.0
JBoss4.2
Please see the mxml file below , If possible please have a look at it , I might not be using dataSerice API correctly.
I have been trying to solve this leak for last two week , I really need help from you guys.
My client has already evaluating other contemporary technology because of this memory issue.
I have also created scalled down war file which can be deployed on any java application server.
Any help will greatly be appreciated
Regards,
Dam
######################## MXML##########################
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="init();" height="100%" width="100%"
>
<mx:Script >
<![CDATA[
import mx.containers.GridRow;
import mx.utils.Base64Decoder;
import mx.utils.StringUtil;
import mx.events.CollectionEvent;
import mx.formatters.Formatter;
import mx.events.ResizeEvent;
import mx.controls.DataGrid;
import mx.effects.Fade;
import mx.events.DataGridEvent;
import mx.utils.ObjectUtil;
import mx.events.ScrollEvent;
import mx.formatters.DateFormatter;
import mx.events.ListEvent;
import mx.data.mxml.DataService;
import mx.messaging.config.ServerConfig;
import mx.messaging.channels.RTMPChannel;
import mx.messaging.ChannelSet;
import mx.rpc.AbstractOperation;
import mx.rpc.remoting.RemoteObject;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;
import mx.messaging.messages.*;
import mx.messaging.events.*;
import mx.controls.Alert;
private var GUIID:String;
private var lastRollOverIndex:Number;
public var tradeService:DataService=null;
public var tradeCollection:ArrayCollection = new ArrayCollection();
public var flag:Boolean = false;
private function init():void {
var guiId:String ="TEST";
createDestination(GUIID);
public function getData():void{
// memory.text =""+ ((System.totalMemory / 1024)/1024);
public function releaseDataServices():void {
// tradeService.fill(null);
tradeService.release();
// tradeService.releaseCollection(tradeCollection);
tradeService.channelSet.disconnectAll();
tradeService.disconnect();
tradeService.logout();
//tradeService.dataStore = null;
/*Function for creating destination*/
private function createDestination(destName:String):void{
var remoteService:RemoteObject = new RemoteObject("DestinationManager");
remoteService.addEventListener(ResultEvent.RESULT, resultHandler,false,0,true);
var operation:AbstractOperation = remoteService.getOperation("createDestination");
operation.send(destName);
var cs:ChannelSet = new ChannelSet();
var rtmpChannel:RTMPChannel = ServerConfig.getChannel("my-rtmp") as RTMPChannel;
cs.addChannel(rtmpChannel);
tradeService = new DataService() ;
tradeService.destination=destName;
tradeService.channelSet = cs;
//This function calls dataservice fill method depending on wheather destination is created or not
private function resultHandler(event:ResultEvent):void{
//call data service as destination is created successfully
var status:Boolean = event.result as Boolean
// Alert.show("status="+status);
if(status){
getData();
else{
//TODO report error to MATS app
public function removeAll():void{
if(tradeList.dataProvider){
tradeCollection.source = new Array();
tradeList.dataProvider.source = new Array();
tradeList.dataProvider = null;
tradeService.release();
// tradeService.releaseCollection(tradeCollection);
tradeService.channelSet.disconnectAll();
tradeService.disconnect();
tradeService.logout();
System.gc();
public function loadData():void
var remoteService:RemoteObject = new RemoteObject("filterRemoteVO");
var operation:AbstractOperation = remoteService.getOperation("loadData");
tradeService.fill(tradeCollection);
operation.send(rowData.text ,GUIID);
tradeList.dataProvider = tradeCollection;
]]>
</mx:Script>
<mx:DataGrid id="tradeList"
initialize="tradeList.dataProvider = tradeCollection" horizontalScrollPolicy="auto"
height="659" x="0" y="84">
<mx:columns>
<mx:DataGridColumn headerText="Security Description" dataField="securityDesc"
/>
<mx:DataGridColumn headerText="B/S" dataField="transactionType"
/>
<mx:DataGridColumn headerText="Amount" dataField="amount"
/>
<mx:DataGridColumn headerText="Price Text" dataField="priceText"
/>
<mx:DataGridColumn headerText="Counterparty" dataField="counterParty"
/>
<mx:DataGridColumn headerText="Trade Date" dataField="tradeDate"
/>
<mx:DataGridColumn headerText="Settle Date" dataField="settleDate"
/>
<mx:DataGridColumn headerText="Trade Status" dataField="tradeStatusId"
/>
<mx:DataGridColumn headerText="Trader" dataField="trader"
/>
<mx:DataGridColumn headerText="Salesperson" dataField="salesperson"
/>
<mx:DataGridColumn headerText="Ticket Number" dataField="tradeNumber"
/>
<mx:DataGridColumn headerText="Entry Date" dataField="tradeTime"
/>
<mx:DataGridColumn headerText="Cancel Date" dataField="cancelDate"
/>
<mx:DataGridColumn headerText="Cancel Time" dataField="cancelTime"
/>
</mx:columns>
</mx:DataGrid >
<mx:Grid x="149" y="23" width="995">
<mx:GridRow width="100%" height="100%">
<mx:GridItem width="100%" height="100%">
<mx:Label text="Enter No of obejcts" width="111"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
<mx:TextInput name="row" id="rowData" width="97"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
<mx:Button label="Load Data" click='loadData()'/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
<mx:Button label="removeAll" click='removeAll()'/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
<mx:Label text="Total Memory"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
<mx:TextInput text="Total Memory" id="memory" width="97"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
<mx:Label text="Grid Row Count"/>
</mx:GridItem>
<mx:GridItem width="100%" height="100%">
<mx:TextInput name="GridRowCountN" id="GridRowCount" width="97"/>
</mx:GridItem>
</mx:GridRow>
</mx:Grid>
</mx:Application>Hi Natasha,
Sorry for late reply.
I tried your suggestion but It did not help to release memory. Actully,this app contains only one event handler which is for remote method call , I dont think this could cause any memory leak.
Profiling session reveals that It is the issue of DataService class.I dont know How do I convince Adobe to investigate this issue.
Regards,
Dharmendra -
Memory leak and char[] ?
Hello all,
I'm not sure whether this post should be here or in WebLogic section, so correct me if I'm wrong.
I'm working on JDeveloper 11.1.1.3 while deployments are made on standalone WebLogic 10.3.3. This thing occurred in previous versions also.
With every deployment WebLogic increases it's used memory until the famous PermGen space error, which is after about 5-6 deployments.
I'm doing my best to understand how to use memleak detection tools. I've switched JDev and WL from Sun jdk which was used before to JRockit, same thing happens. Both JDev's memory profiler and JRockit mission control show something that I really do not understand. char[] uses around 30% of heap space and keeps growing with deployments, next is String with 8%. I never use char in app.
Am I looking at the wrong thing? Is it normal for char[] to increase on WebLogic on deployments? Does anyone know how to check other things and what to check? Someone on other forums mentioned it would be useful to check if ApplicationContext keeps initializing over again on deployments. Does anyone know how to check this?
One more thing, I have successfully deployed app on Tomcat, and Tomcat said there is a memory leak in app, but could not tell anything specific.
I'm kinda lost in this :(It is normal for the PermGen space of the Sun's JVM to get filled after several re-deployments. PermGen stands for "permanent generational". This space is used by classes that is unlikely to need to be garbage-collected, so they are placed in this memory space that is never garbage-collected (for example, the Class instances). When you redeploy an application, a new class loader instance is used and it instantiates new Class instances that fill up the PermGen space. But why this happens on JRockit either, I could not explain.
We have experienced memory leaks related to classes and components that use native memory. For example, we have had significant memory leak when using Oracle's JDBC OCI driver. We were not able to solve this problem, so we switched to JDBC Thin driver (which is very performant and stable today comparing to some years ago). If you are using Oracle JRockit, you can monitor the overall memory usage by the following JRockit command executed at OS command line:
jrcmd <jrockit_pid> print_memusage>where <jrockit_pid> should be replaced by the JVM process ID.
If you suspect existence of native memory leaks, then have a look at the article Thanks for the memory for explanations about how Java uses native memory.
Dimitar -
Memory leak using GWT 1.4 and JDK 1.5
We are running the following:
OS : Solaris 5.10
WebLogic version: 10.0
JDK : Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_14-b03)
Java HotSpot(TM) Server VM (build 1.5.0_14-b03, mixed mode)
GWT : 1.4
Oracle : 10g
We have found memory leak with the above configuration.
After running 1 session we are facing memory leak. The used Java heap is 4% higher than the one used after we conduct
our memory tests for 1 user.
Similarly, after running 5 concurrent sessions we are also facing memory leak where Java heap memory is utilised more
by about 4%.
I have used JRockit JDK 1.5 for figuring out memory leak. I have not found a memory leak in any of the modules
developed by us.
The memory leak issue is we think concerned with the version of JDK, Weblogic, Sun OS.
Can somebody please suggest whether we can use the version as mentioned above?
Any help on this front will be appreciated.gc log:
#log information
JAVA_OPTS="$JAVA_OPTS -verbose:gc "
JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDetails "
JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCTimeStamps "
JAVA_OPTS="$JAVA_OPTS -XX:+DisableExplicitGC "
JAVA_OPTS="$JAVA_OPTS -Xloggc:/path/to/gclog`date +%Y.%m.%d-%H:%M:%S`.log "Check sun papers for garbage collecting tips.
>
Is there any other way we can detect memory leak?
>
You have to profile your Application Server like you did with your own code.
regards
slowfly -
Memory leak within FOProcessor class
Hi all,
I'm trying to use the XML Publisher API (5.6.2 and 5.6.3) to generate PDF documents from XSL templates and XML data in a J2EE environment (Jboss 4.0.5) with Struts but a memory leak occurs.
It seems not to be a multithreading issue because the leak is there even if the PDF documents are generated one by one.
I made many tests to isolate the leak and I have simplified my code as much as possible: it seems to happen within the FOProcessor class.
One of the tests generates 4,500 PDF documents (one at a time) from an XML file (3 KB) and an XSL file (74 KB with blanks). Nothing else is done with the Jboss server during this test. The XSL file was created before the test from a RTF file with XML Publisher. The memory leak is around 70 KB for each PDF document (around 300 MB for the whole test).
As you can see below from the heap histogram (taken at end of test after a full garbage collection) it seems that the XSL and XML elements/attributes are not released (and thus never garbage collected).
Did I miss something or is there an actual problem with the XML/XSL parsing within the XML Publisher API?
Thanks for your help.Object Histogram:
Size Count Class description
131376968 2353450 java.lang.Object[]
60389464 937300 char[]
48260304 335141 oracle.xml.parser.v2.XSLResultElement
35690000 2230625 oracle.xml.util.FastVector
24127104 1005296 java.lang.String
16539120 413478 oracle.xml.parser.v2.XSLNode$AttrValueTmpl
14757064 128058 int[]
13348768 417149 java.lang.ref.Finalizer
12701776 102220 * ConstMethodKlass
12544808 23433 byte[]
12204080 108965 oracle.xml.parser.v2.XSLText
8344600 86584 java.util.Hashtable$Entry[]
7363768 102220 * MethodKlass
5592784 138700 * SymbolKlass
5362256 335141 oracle.xml.parser.v2.XSLAttributeSet[]
5267336 8135 * ConstantPoolKlass
5234016 163563 java.util.TreeMap$Entry
5121744 213406 java.util.Hashtable$Entry
4900480 61256 oracle.xml.parser.v2.XPathStep
4087120 51089 java.lang.reflect.Method
3823216 40276 java.util.HashMap$Entry[]
3524696 8135 * InstanceKlassKlass
3378000 84450 java.util.Hashtable
3064872 127703 java.util.HashMap$Entry
2971904 6880 * ConstantPoolCacheKlass
2968560 26505 oracle.xml.parser.v2.XSLValueOf
2770656 24738 oracle.xml.parser.v2.XSLVariable
2167520 27094 oracle.xml.parser.v2.XPathFunctionCall
1880088 33573 oracle.xml.parser.v2.PathExpr
1726360 61482 java.lang.String[]
1573720 39343 java.util.HashMap
1476576 30762 oracle.xml.parser.v2.XSLExprValue
1460840 36521 java.util.TreeMap
1319360 23560 oracle.xml.parser.v2.XPathConstantExpr
1054976 16484 org.jboss.mx.server.InvocationContext
1001264 3546 * MethodDataKlass
887424 11049 short[]
835680 8705 java.lang.Class
830208 25944 oracle.xml.util.NSNameImpl
705816 29409 java.util.ArrayList
684152 4501 org.jboss.web.tomcat.tc5.session.SessionBasedClusteredSession
670288 14071 java.lang.Object[]
640832 10013 oracle.xml.parser.v2.XPathVarReference
561056 35066 javax.management.modelmbean.DescriptorSupport
556272 23178 EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap$Entry
552984 30451 java.lang.Class[]
494760 2945 oracle.xml.parser.v2.XSLTemplate
480792 20033 antlr.ANTLRHashString
442576 27661 java.lang.Integer
432096 4501 org.jboss.web.tomcat.statistics.ReplicationStatistics$TimeStatistic
429040 10726 org.hibernate.hql.ast.tree.Node
369880 9247 javax.management.modelmbean.ModelMBeanOperationInfo
312384 19524 java.util.TreeMap$3
305368 5453 java.net.URL
287392 8981 org.jboss.mx.interceptor.ReflectedDispatcher
259264 338 EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap$Entry[]
252280 4505 org.jboss.cache.lock.ReadWriteLockWithUpgrade
238600 5965 org.jboss.mx.interceptor.PersistenceInterceptor
238600 5965 org.jboss.mx.interceptor.AttributeDispatcher
236616 9859 org.jboss.mx.server.AbstractMBeanInvoker$OperationKey
219776 3434 java.lang.reflect.Constructor
206880 6465 javax.management.modelmbean.ModelMBeanAttributeInfo
193168 2259 java.lang.reflect.Method[]
173184 5412 java.lang.ref.SoftReference
164920 589 oracle.xml.parser.v2.XSLStylesheet
164464 541 * ObjArrayKlassKlass
152832 6368 org.dom4j.tree.DefaultAttribute
149472 2076 java.lang.reflect.Field
144160 4505 org.jboss.cache.Node
143160 5965 org.jboss.mx.interceptor.ModelMBeanAttributeInterceptor
140600 3515 org.apache.xerces.dom.DeferredTextImpl
140224 2740 javax.management.modelmbean.ModelMBeanAttributeInfo[]
139056 7658 boolean[]
134664 3359 java.lang.String[][]
131936 1178 oracle.xml.parser.v2.XSLCondition
131936 1178 oracle.xml.parser.v2.XSLForEach
129072 2668 javax.management.modelmbean.ModelMBeanOperationInfo[]
128952 5373 EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap$Entry
124776 1733 org.hibernate.hql.ast.tree.IdentNode
115200 1800 javax.management.modelmbean.ModelMBeanInfoSupport
113088 2356 oracle.xml.parser.v2.AdditiveExpr
109416 4559 java.beans.PropertyChangeSupport
108960 1135 java.io.ObjectStreamClass
108120 4505 org.jboss.cache.lock.IdentityLock
105864 345 long[]
98752 3086 java.io.ObjectStreamClass$WeakClassKey
97968 4082 java.util.Vector
96672 2014 java.util.Properties
94240 589 oracle.xml.parser.v2.XSLOutput
90072 3753 javax.management.ObjectName$Property
87432 3643 javax.management.MBeanParameterInfo
82368 858 org.hibernate.hql.ast.tree.DotNode
81248 5078 java.lang.Long
78656 1229 org.hibernate.mapping.Column
77664 4854 java.util.Collections$SynchronizedSet
77448 3227 java.util.LinkedList$Entry
73824 769 org.jboss.mx.modelmbean.XMBean
73536 4596 java.util.Hashtable$KeySet
72144 4509 EDU.oswego.cs.dl.util.concurrent.CopyOnWriteArraySet
72144 4509 EDU.oswego.cs.dl.util.concurrent.CopyOnWriteArrayList
72144 4509 org.jboss.cache.Fqn
72080 4505 org.jboss.cache.lock.ReadWriteLockWithUpgrade$WriterLock
72080 4505 org.jboss.cache.lock.LockStrategyRepeatableRead
72080 4505 org.jboss.cache.lock.ReadWriteLockWithUpgrade$ReaderLock
72080 4505 org.jboss.cache.lock.LockMap
72016 4501 org.apache.catalina.session.StandardSessionFacade
71776 4486 java.io.FileDescriptor
70680 589 oracle.xml.parser.v2.XSLCallTemplate
70680 589 oracle.xml.parser.v2.XSLApplyTemplates
70224 154 org.hibernate.persister.entity.SingleTableEntityPersister
68296 2774 javax.management.ObjectName$Property[]
68160 1065 org.apache.xerces.dom.DeferredElementNSImpl
67760 770 org.hibernate.loader.entity.EntityLoader
66992 19 EDU.oswego.cs.dl.util.concurrent.ConcurrentHashMap$Entry[]
65968 1178 oracle.xml.parser.v2.XPathFilterExpr
65968 589 oracle.xml.parser.v2.XMLUTF8Reader
64432 4027 java.util.HashSet
63648 1326 oracle.xml.parser.v2.XMLNode[]
63440 1586 org.hibernate.loader.DefaultEntityAliases
61256 589 oracle.xml.parser.v2.XSLNode
61256 589 oracle.xml.parser.v2.XMLReader
60816 2534 org.apache.xerces.xni.QName
57360 478 org.hibernate.hql.ast.tree.FromElement
56976 1187 org.hibernate.mapping.Property
56544 1178 oracle.xml.parser.v2.XSLNodeSetExpr
56544 1178 oracle.xml.parser.v2.MultiplicativeExpr
56544 1178 oracle.xml.parser.v2.EqualExpr
54384 618 oracle.xml.parser.v2.XMLError
49392 2783 javax.management.MBeanParameterInfo[]
47648 1489 java.util.LinkedHashMap$Entry
47120 589 oracle.xml.parser.v2.XMLByteReader[]
... -
Using JNI1.2 for C++ and JAVA communication. And the Java application is a multithread application and monitoring JBoss application server using JMX. In each 5 minute interval the C++ application is invoking a method of java class and for each method call its creating a thread and retrieving the value from JBoss.
the Code in run method of thread is as follows
Object obj = context.lookup( "ejb/mgmt/MEJB" );
ManagementHome home = (ManagementHome) PortableRemoteObject.narrow(obj,ManagementHome.class);
server = home.create();
//after that am retrieving the value
But for each iteration the memory is increasing by 2MB of JVM . Its looks like a memory leak in JVM. The JVM version am using is 1.4.2.6.
Could any one suggest me what may be the problem. THis problem is not occuring in Window OS.
Thanks in advance.The JVM version am using is 1.4.2.6.Give it a try with 1.4.2_08.
-
New Memory Leak Detector released
This week we released an updated version of the Memory Leak Detector. It now features a much improved graphical user interface as well as more powerful ways to track down memory leaks.
The tool is designed to help you find memory leaks in production type environments without causing much overhead. It allows you to attach to a running JRockit process, analyze the heap, and detach, leaving the process running at full speed again.
There is an article on dev2dev which describes the tool in more detail: http://dev2dev.bea.com/pub/a/2005/06/memory_leaks.html
Download the free tool today at: http://dev2dev.bea.com/wljrockit/tools.html
Comments are always welcome here in the forum.
Regards,
/Staffan LarsenFYI, the console ist providing this stack trace in the details window:
java.io.IOException: Unsupported JVM on host 'localhost' at port 7090.
Make sure you are running the correct version of JRockit.
at com.jrockit.memleak.model_impl.MemleakUtil.handleConnectionException(Unknown Source)
at com.jrockit.memleak.model_impl.MemleakUtil.doConnect(Unknown Source)
at com.jrockit.memleak.model_impl.MemleakUtil.access$000(Unknown Source)
at com.jrockit.memleak.model_impl.MemleakUtil$1.run(Unknown Source)
at foxtrot.AbstractWorkerThread$2.run(AbstractWorkerThread.java:49)
at java.security.AccessController.doPrivileged(Native Method)
at foxtrot.AbstractWorkerThread.runTask(AbstractWorkerThread.java:45)
at foxtrot.workers.DefaultWorkerThread.run(DefaultWorkerThread.java:153)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
java.io.EOFException]
at com.sun.jndi.rmi.registry.RegistryContext.lookup(Unknown Source)
at com.sun.jndi.toolkit.url.GenericURLContext.lookup(Unknown Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(Unknown Source)
at javax.management.remote.rmi.RMIConnector.findRMIServer(Unknown Source)
at javax.management.remote.rmi.RMIConnector.connect(Unknown Source)
at javax.management.remote.rmi.RMIConnector.connect(Unknown Source)
at com.jrockit.memleak.comm.RemoteMLSController.getServerConnection(RemoteMLSController.java:152) -
Hi all,
using R28.1.3-11-141760-1.6.0_24-20110301-1432-linux-x86_64 of jrockit we experience a memory leak in production. So far I only got to obtain an hprof dump, which I analyzed with eclipse MAT. I'm trying to obtain a flight recording as well but I'm not sure if this will shed more light on the problem. The MAT result is pretty clear but I'm not sure what the cause is. There's one object of com.sun.xml.ws.server.WSEndpointImpl with a growing retained heap, at the moment of the memory dump it was 929 MB. Here's the import part of the dominator tree:
Class Name | Shallow Heap | Retained Heap | Percentage
com.sun.xml.ws.server.WSEndpointImpl @ 0xafaf0f70 | 176 | 929.780.784 | 69,61%
|- com.sun.xml.ws.binding.SOAPBindingImpl @ 0xafaf1160 | 72 | 929.046.360 | 69,56%
| |- com.sun.xml.ws.binding.WebServiceFeatureList @ 0xafaf13e0 | 56 | 929.044.320 | 69,56%
| | '- java.util.HashMap @ 0xafaf1e58 | 80 | 929.044.264 | 69,56%
| | |- java.util.HashMap$Entry[16] @ 0xafaf3058 | 152 | 929.044.160 | 69,56%
| | | |- java.util.HashMap$Entry @ 0xaf9b8f48 | 48 | 928.998.912 | 69,55%
| | | | '- weblogic.wsee.jaxws.EndpointCreationInterceptorFeature @ 0xaf9b8f80| 32 | 928.998.864 | 69,55%
| | | | '- java.util.HashSet @ 0xaf9b92f8 | 24 | 928.998.832 | 69,55%
| | | | '- java.util.HashMap @ 0xaf9b9528 | 80 | 928.998.808 | 69,55%
| | | | |- java.util.HashMap$Entry[32768] @ 0x9462cb88 | 262.168 | 928.998.704 | 69,55%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0x9b672ae8 | 40 | 152.104 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0xad2a9360 | 40 | 152.104 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0xa3949490 | 40 | 152.104 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0xa3a332c8 | 40 | 152.104 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0x954ef698 | 40 | 151.440 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0xb3acff18 | 40 | 148.256 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0xa1db8a38 | 40 | 148.000 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0xb9d18ee8 | 40 | 148.000 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0xbe6bf4d0 | 40 | 147.896 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0xa0397080 | 40 | 147.896 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0xbf6693f0 | 40 | 147.896 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0xc3c4ddb0 | 40 | 143.792 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0x82714140 | 40 | 143.792 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0xa0347178 | 40 | 143.792 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0x919c9948 | 40 | 143.688 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0xbb1f6d28 | 40 | 135.960 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0x8c3cd118 | 40 | 135.488 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0x91d6e950 | 40 | 134.936 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0x8abefe80 | 40 | 134.936 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0x89f0aaa8 | 40 | 134.736 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0xb0f116a8 | 40 | 134.600 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0x9da69938 | 40 | 134.392 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0x96cae018 | 40 | 134.392 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0x88691950 | 40 | 134.040 | 0,01%
| | | | | |- weblogic.wsee.jaxws.ServerLateInitTube @ 0xc201f268 | 40 | 134.040 | 0,01%
| | | | | '- Total: 25 of 36.803 entries | | |
I would appreciate any hints on how to proceed as these are standard java / weblogic classes. If I drill down into the objects I see some ErrorHandler objects, so these objects might accumulate with erroneus requests, but I'm not positive on this since I only checked a few instances. Before I start to try to reproduce this on a test environment I would like to ask for your help.
Kind regards,
Thomas
PS: Sorry, this is probably not really jrockit related, but I know here are some java experts ;)Hi Marcus,
thanks. The FlightRecording did not help, the allocation pressure is not high enough. I eventually fired up memleak and found the following allocation trace, which doesn't help me a lot. I will post in WLS forums.
Trace Type Type ID Class Loader Class Loader ID Percent(%) Count
weblogic.wsee.jaxws.ServerLateInitTube.copy(TubeCloner) weblogic.wsee.jaxws.ServerLateInitTube 98 sun.misc.Launcher$AppClassLoader<0> 0 100 17
weblogic.wsee.jaxws.ServerLateInitTube.copy(TubeCloner) weblogic.wsee.jaxws.ServerLateInitTube 98 sun.misc.Launcher$AppClassLoader<0> 0 100 17
com.sun.xml.ws.api.pipe.PipeClonerImpl.copy(Tube) com.sun.xml.ws.api.pipe.PipeClonerImpl 15773 sun.misc.Launcher$AppClassLoader<0> 0 100 17
weblogic.wsee.jaxws.ServerLateInitTube.<init>(ServerLateInitTube, TubeCloner) weblogic.wsee.jaxws.ServerLateInitTube 98 sun.misc.Launcher$AppClassLoader<0> 0 100 17
weblogic.wsee.jaxws.ServerLateInitTube.copy(TubeCloner) weblogic.wsee.jaxws.ServerLateInitTube 98 sun.misc.Launcher$AppClassLoader<0> 0 100 17
weblogic.wsee.jaxws.ServerLateInitTube.copy(TubeCloner) weblogic.wsee.jaxws.ServerLateInitTube 98 sun.misc.Launcher$AppClassLoader<0> 0 100 17
com.sun.xml.ws.api.pipe.PipeClonerImpl.copy(Tube) com.sun.xml.ws.api.pipe.PipeClonerImpl 15773 sun.misc.Launcher$AppClassLoader<0> 0 100 17
com.sun.xml.ws.api.pipe.helper.AbstractFilterTubeImpl.<init>(AbstractFilterTubeImpl, TubeCloner) com.sun.xml.ws.api.pipe.helper.AbstractFilterTubeImpl 15774 sun.misc.Launcher$AppClassLoader<0> 0 100 17
weblogic.wsee.jaxws.tubeline.standard.WseeServerTube.<init>(WseeServerTube, TubeCloner) weblogic.wsee.jaxws.tubeline.standard.WseeServerTube 2450 sun.misc.Launcher$AppClassLoader<0> 0 100 17
weblogic.wsee.jaxws.tubeline.standard.WseeServerTube.copy(TubeCloner) weblogic.wsee.jaxws.tubeline.standard.WseeServerTube 2450 sun.misc.Launcher$AppClassLoader<0> 0 100 17
weblogic.wsee.jaxws.tubeline.standard.WseeServerTube.copy(TubeCloner) weblogic.wsee.jaxws.tubeline.standard.WseeServerTube 2450 sun.misc.Launcher$AppClassLoader<0> 0 100 17
com.sun.xml.ws.api.pipe.PipeClonerImpl.copy(Tube) com.sun.xml.ws.api.pipe.PipeClonerImpl 15773 sun.misc.Launcher$AppClassLoader<0> 0 100 17
com.sun.xml.ws.api.pipe.TubeCloner.clone(Tube) com.sun.xml.ws.api.pipe.TubeCloner 15776 sun.misc.Launcher$AppClassLoader<0> 0 100 17
com.sun.xml.ws.server.WSEndpointImpl$2.<init>(WSEndpointImpl) com.sun.xml.ws.server.WSEndpointImpl$2 15319 sun.misc.Launcher$AppClassLoader<0> 0 100 17
com.sun.xml.ws.server.WSEndpointImpl.createPipeHead() com.sun.xml.ws.server.WSEndpointImpl 2523 sun.misc.Launcher$AppClassLoader<0> 0 100 17
com.sun.xml.ws.api.server.Adapter$Toolkit.<init>(Adapter) com.sun.xml.ws.api.server.Adapter$Toolkit 15770 sun.misc.Launcher$AppClassLoader<0> 0 100 17
com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.<init>(HttpAdapter) com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit 15306 sun.misc.Launcher$AppClassLoader<0> 0 100 17
com.sun.xml.ws.transport.http.HttpAdapter.createToolkit() com.sun.xml.ws.transport.http.HttpAdapter 15467 sun.misc.Launcher$AppClassLoader<0> 0 100 17
com.sun.xml.ws.transport.http.HttpAdapter.createToolkit() com.sun.xml.ws.transport.http.HttpAdapter 15467 sun.misc.Launcher$AppClassLoader<0> 0 100 17
com.sun.xml.ws.api.server.Adapter$1.create() com.sun.xml.ws.api.server.Adapter$1 2807 sun.misc.Launcher$AppClassLoader<0> 0 100 17
com.sun.xml.ws.api.server.Adapter$1.create() com.sun.xml.ws.api.server.Adapter$1 2807 sun.misc.Launcher$AppClassLoader<0> 0 100 17
com.sun.xml.ws.util.Pool.take() com.sun.xml.ws.util.Pool 15771 sun.misc.Launcher$AppClassLoader<0> 0 100 17
com.sun.xml.ws.transport.http.HttpAdapter.handle(WSHTTPConnection) com.sun.xml.ws.transport.http.HttpAdapter 15467 sun.misc.Launcher$AppClassLoader<0> 0 100 17
com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletContext, HttpServletRequest, HttpServletResponse) com.sun.xml.ws.transport.http.servlet.ServletAdapter 3251 sun.misc.Launcher$AppClassLoader<0> 0 100 17
com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet(HttpServletRequest, HttpServletResponse, ServletContext) com.sun.xml.ws.transport.http.servlet.WSServletDelegate 4388 sun.misc.Launcher$AppClassLoader<0> 0 100 17
com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost(HttpServletRequest, HttpServletResponse, ServletContext) com.sun.xml.ws.transport.http.servlet.WSServletDelegate 4388 sun.misc.Launcher$AppClassLoader<0> 0 100 17
com.sun.xml.ws.transport.http.servlet.WSServlet.doPost(HttpServletRequest, HttpServletResponse) com.sun.xml.ws.transport.http.servlet.WSServlet 4743 sun.misc.Launcher$AppClassLoader<0> 0 100 17
javax.servlet.http.HttpServlet.service(HttpServletRequest, HttpServletResponse) javax.servlet.http.HttpServlet 15468 sun.misc.Launcher$AppClassLoader<0> 0 100 17
javax.servlet.http.HttpServlet.service(ServletRequest, ServletResponse) javax.servlet.http.HttpServlet 15468 sun.misc.Launcher$AppClassLoader<0> 0 100 17
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run() weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction 15469 sun.misc.Launcher$AppClassLoader<0> 0 100 17
weblogic.servlet.internal.StubSecurityHelper.invokeServlet(ServletRequest, HttpServletRequest, ServletRequestImpl, ServletResponse, HttpServletResponse, Servlet) weblogic.servlet.internal.StubSecurityHelper 1044 sun.misc.Launcher$AppClassLoader<0> 0 100 17
weblogic.servlet.internal.ServletStubImpl.execute(ServletRequest, ServletResponse, FilterChainImpl) weblogic.servlet.internal.ServletStubImpl 907 sun.misc.Launcher$AppClassLoader<0> 0 100 17
weblogic.servlet.internal.ServletStubImpl.execute(ServletRequest, ServletResponse) weblogic.servlet.internal.ServletStubImpl 907 sun.misc.Launcher$AppClassLoader<0> 0 100 17
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(ServletStubImpl, HttpServletRequest, HttpServletResponse) weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction 15310 sun.misc.Launcher$AppClassLoader<0> 0 100 17
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run() weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction 15310 sun.misc.Launcher$AppClassLoader<0> 0 100 17
weblogic.security.acl.internal.AuthenticatedSubject.doAs(AbstractSubject, PrivilegedAction) weblogic.security.acl.internal.AuthenticatedSubject 2125 sun.misc.Launcher$AppClassLoader<0> 0 100 17
weblogic.security.service.SecurityManager.runAs(AuthenticatedSubject, AuthenticatedSubject, PrivilegedAction) weblogic.security.service.SecurityManager 15464 sun.misc.Launcher$AppClassLoader<0> 0 100 17
weblogic.servlet.internal.WebAppServletContext.securedExecute(HttpServletRequest, HttpServletResponse, boolean) weblogic.servlet.internal.WebAppServletContext 1108 sun.misc.Launcher$AppClassLoader<0> 0 100 17
weblogic.servlet.internal.WebAppServletContext.execute(ServletRequestImpl, ServletResponseImpl) weblogic.servlet.internal.WebAppServletContext 1108 sun.misc.Launcher$AppClassLoader<0> 0 100 17
weblogic.servlet.internal.ServletRequestImpl.run() weblogic.servlet.internal.ServletRequestImpl 67 sun.misc.Launcher$AppClassLoader<0> 0 100 17
weblogic.work.ExecuteThread.execute(Runnable) weblogic.work.ExecuteThread 1085 sun.misc.Launcher$AppClassLoader<0> 0 100 17
weblogic.work.ExecuteThread.run() weblogic.work.ExecuteThread 1085 sun.misc.Launcher$AppClassLoader<0> 0 100 17
Kind regards,
Thomas -
JSF (RI) app hot-deploy memory leak
I have a standard JSF (RI) based web app that appears to be working just fine in terms of functionality. However, I believe that there is a memory leak associated with the sort of frequent hot-deploy cycles that are typical during a normal development cycle. I have been monitoring the app via the jvmstat 3.0 tools and have witnessed NO memory growth in the young or old generation areas - regardless of useage pattern. All of the growth seems to happen in the perm area of memory and be directly coincidental with the occurence of a deploy. Eventually, continued hot-deply cycles will result in an OutOfMemory error on the container - please note that continued and extensive use of the app WITHOUT the aforementioned hot-deploys does NOT result in the OutOfMemory error.
From my research so far, I have discovered the following thread:
http://forum.hibernate.org/viewtopic.php?t=935948&postdays=0&postorder=asc&start=75
It refers to a similar problem with hiberate (which I am NOT using) as well as a commons-logging and several others. From the looks of it, I strongly suspect that there may be an issue with JSF when it's implementation is bundled inside the WEB-INF/lib dir - i.e. inside the specific web app's ClassLoader.
Based on the above, I have implemented a SessionContextListener that invokes the org.apache.commons.logging.LogFactory.release() inside the contextDestroyed( ServletContextEvent e ) method. This does appear to free up some perm memory but there is still large growth that appears to be directly related to the FacesServlet initialization (navigation handlers, etc). I looked into calling the FacesContext.release() method which seems to have purpose similar to that of the LogFactory.release() method. However, at the time of the contextDestroyed() invocation, FacesContext.getCurrentInstance() always returns null, so I do not ever have an opportunity to invoke the release method that I am aware of. If my suspicions are correct, than I would likely be able to avoid this problem entirely by simply placing the JSF implementation jars in the conatiner's shared lib dir - instead of bundling it inside WEB-INF/lib. However, this is not an option for this container as multiple web apps (which require the flexibility to use differing JSF implementations and versions - i.e. RI vs MyFaces, etc) will run on this container.
I don't believe it is at all related to the problem at hand, but my container is JBoss 4.0.2.
Any and all assistance and suggestion will be greatly appreciated! Has anyone else seen this sort of behavior? Are there any work arounds or corrective actions?
TIAHas anyone else run into this? I'd greatly appreciate any assistance as I cannot seem to resolve this hot-deploy related leak.
-
Memory Leak: Do I need to explicitly free memory reference for collection?
Hi,
My web application uses JRockit JDK 1.4.2, Java Servlet, JSP &Struts. It is a clustered environment using WL 8.1 sp 4. I am investigating whether there are any memory leaks in the application & what are best practices to avoid leaks.
A specific scenario is as follows:
For an incoming request, the struts action class creates object �O� (of class A) and set �O� as a request attribute. This request attribute is used to display values on the JSP.
Now, class A has a heavily nested structure: Class A has object of class B, where B has a HashSet of objects of type C and where C has an object of type D and E.
Though I set this object �O� in request scope, do I need to explicitly nullify any of the references within object �O�? Can �not doing this� result in a memory leak?
Thanks in advance,
sjaiprakashjEnv->ReleaseStringUTFChars((jstring) jStr, str);free(str); //Is this line valid or outright wrong?Outright wrong.
Another question is if ReleaseStringUTFChars actually frees str then will it set str to NULL?No, that's impossible by the semantics of C and C++.
I guess not as we are not sending this pointer by reference.Exactly, so what you described is impossible. No need to ask really.
My last question is if str is NULL then calling ReleaseStringUTFChars over it can cause any problem?How could it be null? If it comes from GetStringUTFChars that's impossible, and if it doesn't you don't have any business calling ReleaseStringUTFChars() on it, whatever its value. -
How to configure JProfiler6 to monitor tomcat6.0 for memory leak
Hello,
Can anyone help. I am tring to work out the memory leak of my Web Application running on the local server. I have been told that jprofiler is a good tool for monitoring memory. I have dowloaded jprofiler6, but I dont know how to config the setting.
what i have done is:
1.from the Quickstart window->An application server, locally or remotely
2.follow the wizard step by step
1)choose application server Apache Tomcat 6.x
2)application is located "on this computer"
3) Chose JVM vendor
4) wait for a connection from the JProfiler GUI
5) Locate the start script :C:\Program Files\Apache Software Foundation\apache-tomcat-6.0.20\bin\startup.bat
6) port:8849
7)finished
After i done these, a error message came out said:
"Could not connect ot 127.0.0.1:8849.Please make sure that the remote address is correct, the remote program is started properly and the netword route allows socket connections."Hi,
The recommended solution is to download Oracle JRockit Mission Control (available here: http://www.oracle.com/technology/software/products/jrockit/index.html) and install on your server. The installers include Oracle JRockit JVM as well as Mission Control, and are free of license checks.
If that solution for some reason is unfeasible you can download legacy development license files from here (http://download2.bea.com/pub/license/All%20Products/BEA_WebLogic.zip).
The license you are looking for is named “LIC-WLRT20.txt”. Rename it to license.bea, and follow the instructions at http://edocs.bea.com/jrockit/geninfo/diagnos/conf_run.html#wp1077371 -
I have a 10.1.3 ADF application that runs well on Web Sphere and OC4J. I'm trying to run it on JBoss EAP 6.0.1. The ear file was deployed successfully to JBOSS and according to ADF logging the connection to Oracle database is established.
But when I try to load the application login page, I obtain the following exception
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/cv].[Faces Servlet]] (http-/0.0.0.0:8080-1) Servlet.service() for servlet Faces Servlet threw exception: oracle.jbo.common.ampool.ApplicationPoolException:
JBO-30003: The application pool (com.claimvantage.adf.root.Oracle) failed to checkout an application module due to the following exception:
at oracle.jbo.common.ampool.ApplicationPoolImpl.doCheckout(ApplicationPoolImpl.java:2002) [bc4jct.jar:]
at oracle.jbo.common.ampool.ApplicationPoolImpl.useApplicationModule(ApplicationPoolImpl.java:2793) [bc4jct.jar:]
at oracle.jbo.common.ampool.SessionCookieImpl.useApplicationModule(SessionCookieImpl.java:453) [bc4jct.jar:]
at oracle.jbo.http.HttpSessionCookieImpl.useApplicationModule(HttpSessionCookieImpl.java:233) [adfmweb.jar:]
at oracle.jbo.common.ampool.SessionCookieImpl.useApplicationModule(SessionCookieImpl.java:424) [bc4jct.jar:]
at oracle.jbo.common.ampool.SessionCookieImpl.useApplicationModule(SessionCookieImpl.java:419) [bc4jct.jar:]
at oracle.adf.model.bc4j.DCJboDataControl.rebuildApplicationModule(DCJboDataControl.java:1536) [adfm.jar:]
at oracle.adf.model.bc4j.DCJboDataControl.beginRequest(DCJboDataControl.java:1396) [adfm.jar:]
at oracle.adf.model.binding.DCDataControlReference.getDataControl(DCDataControlReference.java:99) [adfm.jar:]
at oracle.adf.model.BindingContext.get(BindingContext.java:457) [adfm.jar:]
at oracle.adf.model.BindingContext.findDataControl(BindingContext.java:308) [adfm.jar:]
at com.claimvantage.web.bean.jsf.JhsPageLifecycle.getMessageHolder(JhsPageLifecycle.java:220) [cv-model.jar:]
at com.claimvantage.web.bean.jsf.JhsPageLifecycle.reportErrors(JhsPageLifecycle.java:203) [cv-model.jar:]
at oracle.adf.controller.v2.lifecycle.PageLifecycleImpl.prepareRender(PageLifecycleImpl.java:548) [adf-controller.jar:]
at oracle.adf.controller.faces.lifecycle.FacesPageLifecycle.prepareRender(FacesPageLifecycle.java:99) [adf-controller.jar:]
at oracle.jheadstart.controller.jsf.lifecycle.JhsPageLifecycle.prepareRender(JhsPageLifecycle.java:1080) [jhsadfrt-10.1.3.jar:]
at oracle.adf.controller.v2.lifecycle.Lifecycle$1.execute(Lifecycle.java:297) [adf-controller.jar:]
at oracle.adf.controller.v2.lifecycle.Lifecycle.executePhase(Lifecycle.java:116) [adf-controller.jar:]
at oracle.adf.controller.faces.lifecycle.ADFPhaseListener.mav$executePhase(ADFPhaseListener.java:29) [adf-controller.jar:]
at oracle.adf.controller.faces.lifecycle.ADFPhaseListener$1.before(ADFPhaseListener.java:426) [adf-controller.jar:]
at oracle.adf.controller.faces.lifecycle.ADFPhaseListener.beforePhase(ADFPhaseListener.java:77) [adf-controller.jar:]
at com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:228) [jsf-impl-2.1.13-redhat-1.jar:2.1.13-redhat-1]
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:99) [jsf-impl-2.1.13-redhat-1.jar:2.1.13-redhat-1]
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) [jsf-impl-2.1.13-redhat-1.jar:2.1.13-redhat-1]
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) [jboss-jsf-api_2.1_spec-2.0.7.Final-redhat-1.jar:2.0.7.Final-redhat-1]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.17.Final-redhat-1.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.17.Final-redhat-1.jar:]
at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:162) [adfm.jar:]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.17.Final-redhat-1.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.17.Final-redhat-1.jar:]
at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._invokeDoFilter(AdfFacesFilterImpl.java:228) [adf-faces-impl-no-oracle-desktop-xss.jar:10_1_3_2_0]
at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._doFilterImpl(AdfFacesFilterImpl.java:197) [adf-faces-impl-no-oracle-desktop-xss.jar:10_1_3_2_0]
at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl.doFilter(AdfFacesFilterImpl.java:123) [adf-faces-impl-no-oracle-desktop-xss.jar:10_1_3_2_0]
at oracle.adf.view.faces.webapp.AdfFacesFilter.doFilter(AdfFacesFilter.java:103) [adf-faces-api.jar:10_1_3_2_0]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.17.Final-redhat-1.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.17.Final-redhat-1.jar:]
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:840) [jbossweb-7.0.17.Final-redhat-1.jar:]
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:622) [jbossweb-7.0.17.Final-redhat-1.jar:]
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:560) [jbossweb-7.0.17.Final-redhat-1.jar:]
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:488) [jbossweb-7.0.17.Final-redhat-1.jar:]
at com.claimvantage.web.sso.AuthenticationFilter.doFilter(AuthenticationFilter.java:272) [cv-model.jar:]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.17.Final-redhat-1.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.17.Final-redhat-1.jar:]
at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:162) [adfm.jar:]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.17.Final-redhat-1.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.17.Final-redhat-1.jar:]
at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._invokeDoFilter(AdfFacesFilterImpl.java:228) [adf-faces-impl-no-oracle-desktop-xss.jar:10_1_3_2_0]
at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._doFilterImpl(AdfFacesFilterImpl.java:197) [adf-faces-impl-no-oracle-desktop-xss.jar:10_1_3_2_0]
at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl.doFilter(AdfFacesFilterImpl.java:123) [adf-faces-impl-no-oracle-desktop-xss.jar:10_1_3_2_0]
at oracle.adf.view.faces.webapp.AdfFacesFilter.doFilter(AdfFacesFilter.java:103) [adf-faces-api.jar:10_1_3_2_0]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.17.Final-redhat-1.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.17.Final-redhat-1.jar:]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.17.Final-redhat-1.jar:]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.17.Final-redhat-1.jar:]
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169) [jboss-as-web-7.1.3.Final-redhat-4.jar:7.1.3.Final-redhat-4]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.17.Final-redhat-1.jar:]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.17.Final-redhat-1.jar:]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.17.Final-redhat-1.jar:]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:372) [jbossweb-7.0.17.Final-redhat-1.jar:]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.17.Final-redhat-1.jar:]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:679) [jbossweb-7.0.17.Final-redhat-1.jar:]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931) [jbossweb-7.0.17.Final-redhat-1.jar:]
at java.lang.Thread.run(Unknown Source) [rt.jar:1.6.0_16]
Any help would be really appreciated.
ThanksThanks Frank for your answer.
I can't see where the exception states that DB connection was not established!
In the log, I have:
21:49:06,874 INFO [stdout] (http-/0.0.0.0:8080-1) [3011] Created root application module: 'com.claimvantage.adf.root.RootAppModule'
21:49:06,874 INFO [stdout] (http-/0.0.0.0:8080-1) [3012] Locale is: 'en_US'
21:49:06,874 INFO [stdout] (http-/0.0.0.0:8080-1) [3013] ApplicationPoolImpl.resourceStateChanged wasn't release related. No notify invoked.
21:49:06,890 INFO [stdout] (http-/0.0.0.0:8080-1) [3014] Oracle SQLBuilder: Registered driver: oracle.jdbc.driver.OracleDriver
21:49:06,890 INFO [stdout] (http-/0.0.0.0:8080-1) [3015] import java.util.*; // JBO-JDBC-INTERACT
21:49:06,890 INFO [stdout] (http-/0.0.0.0:8080-1) [3016] import java.sql.*; // JBO-JDBC-INTERACT
21:49:06,890 INFO [stdout] (http-/0.0.0.0:8080-1) [3017] import java.io.*; // JBO-JDBC-INTERACT
21:49:06,890 INFO [stdout] (http-/0.0.0.0:8080-1) [3018] public class JDBCCalls // JBO-JDBC-INTERACT
21:49:06,890 INFO [stdout] (http-/0.0.0.0:8080-1) [3019] { // JBO-JDBC-INTERACT
21:49:06,890 INFO [stdout] (http-/0.0.0.0:8080-1) [3020] public Connection conn = null; // JBO-JDBC-INTERACT
21:49:06,890 INFO [stdout] (http-/0.0.0.0:8080-1) [3021] public CallableStatement cStmt = null; // JBO-JDBC-INTERACT
21:49:06,890 INFO [stdout] (http-/0.0.0.0:8080-1) [3022] public PreparedStatement pStmt = null; // JBO-JDBC-INTERACT
21:49:06,890 INFO [stdout] (http-/0.0.0.0:8080-1) [3023] public Statement stmt = null; // JBO-JDBC-INTERACT
21:49:06,890 INFO [stdout] (http-/0.0.0.0:8080-1) [3024] public ResultSet rslt = null; // JBO-JDBC-INTERACT
21:49:06,890 INFO [stdout] (http-/0.0.0.0:8080-1) [3025] public static void main(String argv[]) // JBO-JDBC-INTERACT
21:49:06,890 INFO [stdout] (http-/0.0.0.0:8080-1) [3026] { // JBO-JDBC-INTERACT
21:49:06,890 INFO [stdout] (http-/0.0.0.0:8080-1) [3027] DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); // JBO-JDBC-INTERACT
21:49:06,890 INFO [stdout] (http-/0.0.0.0:8080-1) [3028] Creating a new pool resource
21:49:06,890 INFO [stdout] (http-/0.0.0.0:8080-1) [3029] Trying connection/2: url='jdbc:oracle:thin:@s1ora01s:1521:s1ora01a' ...
21:49:07,093 INFO [stdout] (http-/0.0.0.0:8080-1) [3030] conn = DriverManager.getConnection("jdbc:oracle:thin:@s1ora01s:1521:s1ora01a", /*properties*/); // JBO-JDBC-INTERACT
21:49:07,093 INFO [stdout] (http-/0.0.0.0:8080-1) [3031] conn.setAutoCommit(false); // JBO-JDBC-INTERACT
21:49:07,093 INFO [stdout] (http-/0.0.0.0:8080-1) [3032] Successfully logged in
21:49:07,093 INFO [stdout] (http-/0.0.0.0:8080-1) [3033] JDBCDriverVersion: 10.2.0.1.0XE
21:49:07,093 INFO [stdout] (http-/0.0.0.0:8080-1) [3034] DatabaseProductName: Oracle
21:49:07,093 INFO [stdout] (http-/0.0.0.0:8080-1) [3035] DatabaseProductVersion: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options
Don't you think that it indicates that DB connection is well established?
MBen -
How to determine memory leaks?
I tried in XCODE, the RUN/ Start with Performance TOol / and tried out the various options. I was running my app and looking to see if it would report increasing memory use but it seemed to be looking at my total system (i was running under the simulator). In general what is the recommended procedure for determining memory leaks, which tool to use, and what tracing can i use?
How does one look at the retain count of an object? are there system routines that have knonw leaks?You took the right path. Once instruments comes up select the Leaks tool. Turn off automatic leak detection. In your app, start off at some known state, do something, and come back to the known state and check for leaks. For instance start off in a view, do something that brings up another view then come back to the original view and check for leaks. Leaks will show you if you leaked. Since you took a very deterministic path then checked it should be straight forward to go to the code and find / fix the leaks. Leaks shows you where the code where the leak was generated.
Maybe you are looking for
-
Problem faced in viewing SVG elements in IE 7 in windows 2003 server machine
Hi All, We are using SVG to use graphics elements in web page for our product. The web page contains HTML+SVG elements. If we use an HTML Image element in our web page display and if we draw or configure SVG elements like rectangle or circle over the
-
Hi, I understand that I should get some Apple Hardware Tests to solve freezing applications problems I already had before upgrading to Lion to Leopard to mountain lion. I do not succeed to follow the directions I've been provided i.e. turn off the co
-
I can't print anything from TextEdit. I can print using other applications just fine, but when I try to print a TextEdit document, it seems to send the job to my printer, but then my printer status program says that the printer is idle, and it stops
-
Crashing: Loading ExporterQuickTimeHost.pm
I'm using the trial of Premiere Pro 5.5 and having lots of problems with it crashing while working on a short (5 minutes) full HD video. I'm on a new HP (1 week old) Win 7 with 12 GB RAM, 2 HD's, quad core i7, with a big Gforce GPU, 64 bit of course.
-
Problem while opening an excel file
Hi I am trying to open an excel file by clicking a link where it goes to action class and then sets the content type to excel and I am opning it from there�but the strange thing is that a file download opens with open/save/cancel but in the same wind