[rules-users] permgen error for simple rule stress test
Mark Proctor
mproctor at codehaus.org
Tue Jan 28 19:18:32 EST 2014
permien issus were fixed in the 5.6 release, and 6.0 release, by Davide Sottara.
Mark
On 28 Jan 2014, at 21:05, anjana.ackroyd <anjana.ackroyd at gmail.com> wrote:
> We are running a simple stress test (whose code I will paste below) for a
> numbercompare rule file)
> We get the following error before the test finishes. Which seems odd for one
> rule
> javax.servlet.ServletException: java.lang.OutOfMemoryError: PermGen space
>
> This test is run against 3 loablanced tomcat servers
>
>
> Here is my JVM_OPTS for each of those tomcat
> JVM_OPTS="-Xms4096m -Xmx4096m -XX:NewSize=2048m -XX:PermSize=512m
> -XX:MaxPermSize=512m -Xss1024K -XX:+UseCodeCacheFlushing
> -XX:-UseSplitVerifier"
>
> Here is
>
> I have a simple rule file deployed on guvnor on my abc with JVM_OPTS on the
> guvnor being
> JVM_OPTS="-Xms4096m -Xmx4096m -XX:NewSize=2048m -XX:PermSize=512m
> -XX:MaxPermSize=512m -Xss1024K
>
>
>
>
> Here is my stress test that we are running
>
> package DroolsTest;
> import java.io.BufferedReader;
> import java.io.InputStream;
> import java.io.InputStreamReader;
> import java.net.HttpURLConnection;
> import java.net.URL;
>
> import confident.guppy.tools.Caller;
>
> public class DroolsSpeedTest {
>
> public static void main(String[] args) {
> HttpURLConnection httpURLConnection = null;
> InputStream inputStream = null;
> BufferedReader bufferedReader = null;
>
> long t1 = System.currentTimeMillis();
> for (int i = 0; i < 10000; i++) {
> try {
> long start =
> System.currentTimeMillis();
> // Three
> boxes
> String url =
> "https://abc-uat2.xyz.com/ces/v2.0/rules/10/compare/10";
>
>
>
>
> httpURLConnection = (HttpURLConnection) ( new URL(url).openConnection());
>
> if
> (httpURLConnection != null) {
>
> inputStream = httpURLConnection.getInputStream();
>
> bufferedReader = new BufferedReader(new InputStreamReader(
>
> inputStream));
>
> String results = "";
>
> String info = "";
>
> while ((info = bufferedReader.readLine()) != null) {
>
> results += info;
>
> }
>
> //caller.log(results);
> } else {
>
> System.out.println("Unable to create the HTTP connection with the required
> server...");
> }
>
> if (i % 20
> == 0 && i != 0 ) {
>
> System.out.println(" passing " + i + " ms " + (
> System.currentTimeMillis() - start ));
> }
>
> } catch (Exception boom) {
>
> boom.printStackTrace();
>
> System.out.println("It died on the " + i + " attempt because " +
> boom.getMessage());
> }
> }
> long t2 = System.currentTimeMillis() - t1 ;
> System.out.println("I took ms : "+ t2 );
> }
> }
>
>
>
>
> Here is my rules defined on guvnor
>
>
>
> package org.numbercompare;
> declare NumberCompare
> message : String
> numberone: Integer
> numbertwo: Integer
> end
>
> rule "numberone is equals to numbertwo"
>
> when
> n: NumberCompare(numberone == numbertwo);
>
> then
> n.setMessage("numberone is equals to numbertwo");
>
> end
>
> rule "numberone is greater than numbertwo"
> when
> n: NumberCompare(numberone > numbertwo);
>
> then
> n.setMessage("numberone is greater than numbertwo");
> end
>
> rule "numberone is less than numbertwo"
> when
> n: NumberCompare(numberone < numbertwo);
>
> then
> n.setMessage("numberone is less than numbertwo");
>
> end
>
>
> Here is my code that updates the rule file
>
>
>
> public KnowledgeBase readKnowledgeBase() throws Exception {
> ResourceFactory.getResourceChangeNotifierService().start();
> ResourceFactory.getResourceChangeScannerService().start();
> ResourceChangeScannerConfiguration sconf =
> ResourceFactory.getResourceChangeScannerService().newResourceChangeScannerConfiguration();
> sconf.setProperty("drools.resource.scanner.interval", "2");
> ResourceFactory.getResourceChangeScannerService().configure(sconf);
> KnowledgeAgentConfiguration kaconf =
> KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
> kaconf.setProperty("drools.agent.scanDirectories", "true");
> kaconf.setProperty("drools.agent.scanResources", "true");
> kaconf.setProperty("drools.agent.newInstance", "false");
> KnowledgeAgent kagent =
> KnowledgeAgentFactory.newKnowledgeAgent("CS", kaconf);
>
> kagent.applyChangeSet(ResourceFactory.newClassPathResource("ChangeSet.xml"));
> KnowledgeBase kbase = kagent.getKnowledgeBase();
>
> return kbase;
> }
>
> @Override
> public DroolsDTO getDroolsDTO(int numberone, int numbertwo) throws
> Exception {
> DroolsDTO droolsDTO = new DroolsDTO();
> KnowledgeBase kb = readKnowledgeBase();
> FactType factType = kb.getFactType("org.numbercompare",
> "NumberCompare");
> Object nc = factType.newInstance();
> factType.set(nc, "numberone", numberone);
> factType.set(nc, "numbertwo", numbertwo);
> StatefulKnowledgeSession ksession =
> kb.newStatefulKnowledgeSession();
> ksession.insert(nc);
> ksession.fireAllRules();
> ksession.dispose();
> droolsDTO.setMessage(factType.get(nc, "message").toString());
> return droolsDTO;
> }
>
>
> My changeset.xml
> <change-set xmlns='http://drools.org/drools-5.0/change-set'
> xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'
> xs:schemaLocation='http://drools.org/drools-5.0/change-set
> http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-api/src/main/resources/change-set-1.0.0.xsd'
>>
> <add>
> <resource
> source='http://abc:8082/guvnor/org.drools.guvnor.Guvnor/package/org.numbercompare/LATEST'
> type='PKG' basicAuthentication="enabled" username="admin" password="admin"/>
> </add>
> </change-set>
>
>
>
>
>
>
>
> Also in the guvnor logs during the test I see
> , I see thousands of these: WARN 28-01 11:50:55,551
> (RulesRepositoryManager.java:getRulesRepository:70) Creating RulesRepository
> with default username. =============== session-guest-864931
> and the session-guest numbers keep climbing.
> and admin user logging in about every second.
>
>
>
>
> --
> View this message in context: http://drools.46999.n3.nabble.com/permgen-error-for-simple-rule-stress-test-tp4027895.html
> Sent from the Drools: User forum mailing list archive at Nabble.com.
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
More information about the rules-users
mailing list