-
-
Save sammso/23740d06006a6dffb967692f16f9c727 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* ********************************************************************************************************* | |
* | |
* Usage: | |
* | |
* Run this Script Lifeay 6.2 's scripting console to trouble shot caches | |
* | |
* variable MIN_MISS_PERCENTAGE you can limit that itdoes not pring caches that fill rate is low. | |
* variable PRINT_SQL set this true if you want to print SQL statement ready to be inserted | |
* variable NODE_NAME is the node name for printSQL statement. | |
* | |
CREATE TABLE CacheSizes ( | |
node VARCHAR(12) NOT NULL, | |
cacheType VARCHAR(12) NOT NULL, | |
bean VARCHAR(255) NOT NULL, | |
objectCount INT NOT NULL, | |
cacheHits INT NOT NULL, | |
cacheMisses INT NOT NULL, | |
cacheMissPercentage INT NOT NULL, | |
PRIMARY KEY ( node, cacheType, bean ) | |
); | |
* | |
* See variables below: | |
**/ | |
var MIN_MISS_PERCENTAGE = 0; | |
var NODE_NAME="node1"; | |
var PRINT_SQL=false; | |
/** | |
* ********************************************************************************************************* | |
*/ | |
var fields = [ "CacheType", ".Bean", "ObjectCount", "CacheHits", "CacheMisses", "CacheMissPercentage" ]; | |
var padding30 = Array(30).join(' '), padding12 = Array(12).join(' '), padding20 = Array(20).join(' '); | |
var platformMBeanServer = Packages.java.lang.management.ManagementFactory.getPlatformMBeanServer(); | |
function printInColumns(values, isHeader) { | |
var beanName = values[1], cacheType = values[0].slice(0, 9), objectCount = values[2], cacheHits = values[3], cacheMisses = values[4], cacheMissPercentage = values[5]; | |
if (PRINT_SQL) { | |
if (isHeader) return; | |
out.println("INSERT INTO CacheSizes VALUES (\"" + NODE_NAME + "\",\"" + cacheType + "\",\"" + beanName + "\"," + objectCount + "," + cacheHits + "," + cacheMisses + "," + cacheMissPercentage + ");"); | |
} | |
else { | |
out.println(values[0].slice(0, 9) + " " | |
+ (beanName.slice(beanName.lastIndexOf('.') + 1) + padding30).slice(0, 30) | |
+ (padding12 + values[2]).slice(-12) | |
+ (padding12 + values[3]).slice(-12) | |
+ (padding12 + values[4]).slice(-12) | |
+ (padding20 + values[5]).slice(-20) | |
+ " " + beanName); | |
} | |
} | |
function liferayStatisticBeans() { | |
var result = []; | |
var names = platformMBeanServer.queryNames(new Packages.javax.management.ObjectName("net.sf.ehcache:*"), null); | |
for (var iterator = names.iterator(); iterator.hasNext(); ) { | |
var name = iterator.next(); | |
if (name.getCanonicalName().endsWith("CacheStatistics")) { | |
result[result.length] = name; | |
} | |
} | |
return result; | |
} | |
function displayLiferayCaches(names) { | |
printInColumns(fields,true); | |
for (var x = 0; x < names.length; x++) { | |
var cachesStats = []; | |
if (names[x].getCanonicalName().startsWith("net.sf.ehcache:CacheManager=net.sf.ehcache.CacheManager")) { | |
continue; | |
} | |
var object = platformMBeanServer.getAttribute(names[x], fields[5]); | |
var misspercentage = Packages.java.lang.Math.round(object.doubleValue() * 100);; | |
if (misspercentage >= MIN_MISS_PERCENTAGE) { | |
cachesStats[5] = misspercentage; | |
var name = names[x].getCanonicalName().slice("net.sf.ehcache:CacheManager=".length); | |
cachesStats[0] = name.slice(0, name.indexOf(',')); | |
var cacheBean = name.slice(name.indexOf(",name=") + 6); | |
cachesStats[1] = cacheBean.slice(0, cacheBean.length - ",type=CacheStatistics".length); | |
for (var i = 2; i < 5 ; i++) { | |
var object = platformMBeanServer.getAttribute(names[x], fields[i]); | |
if (object instanceof Packages.java.lang.Double) { | |
cachesStats[i] = Packages.java.lang.Math.round(object.doubleValue() * 100); | |
} else { | |
cachesStats[i] = object; | |
} | |
} | |
printInColumns(cachesStats,false); | |
} | |
} | |
} | |
var names = liferayStatisticBeans(); | |
if (names.length > 0) { | |
displayLiferayCaches(names); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment