Warning: session_start(): open(/var/lib/php/sessions/sess_me67ltocooet4dvedaps9f14fi, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
lib 1400084 // patched heap analyzer
import org.gridkit.jvmtool.heapdump.*;
import org.netbeans.lib.profiler.heap.*;
import java.lang.reflect.Field;
static Heap heap;
sbool fake = false;
p-experiment {
File f = stefansOS_heapDumpFile();
print("Loading heap dump (" + toM(fileSize(f)) + " M)...");
heap = HeapFactory.createHeap(f);
print("Got heap.");
L classes = heap.getAllClasses();
print("Got " + n2(classes, "class", "classes"));
//pnl(sortedIC(mapMethod(classes, 'getName)));
L classLoaderClasses = filter(classes, func(JavaClass c) -> bool { startsWithOneOf(c.getName(), "main$JavaXClassLoader", "x30$JavaXClassLoader") });
print("Got " + n2(classLoaderClasses, "class loader class", "class loader classes"));
L classLoaders = concatLists(mapMethod('getInstances, classLoaderClasses));
print("Got " + n2(classLoaders, "class loader"));
L defunctClassLoaders = filter(classLoaders, func(Instance cl) { isTrue(cl.getValueOfField('retired)) });
print("Got " + n2(defunctClassLoaders, "defunct class loader"));
print();
if (empty(defunctClassLoaders)) {
if (fake) {
defunctClassLoaders = classLoaders;
print("FAKING IT");
} else {
print("No memory leaks.");
ret;
}
}
print("Calculating GC roots...");
for (Instance cl : defunctClassLoaders) {
Instance progIDInstance = (Instance) cl.getValueOfField('progID);
S moduleID = HeapWalker.stringValue(progIDInstance);
print("Checking module ID: " + snippetWithTitle_cached(moduleID));
print("\nPath to GC root:");
printLinesWithGrowingIndent(map(func(Instance i) -> S { i.getJavaClass().getName() }, heapWalker_pathToGCRoot(cl)));
print();
//Instance i = cl.getNearestGCRootPointer();
//print("i => " + i);
}
}