OK, I just tried to limit it to 100M. After deploying the new war file
to tomcat I thought it would be goof to just make this call:
RecommenderServlet?userID=1&debug=true
So, I get the following error:
*exception*
javax.servlet.ServletException:
org.apache.mahout.cf.taste.common.TasteException:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No
operations allowed after connection closed.
org.apache.mahout.cf.taste.web.RecommenderServlet.init(RecommenderServlet.java:76)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:662)
*root cause*
org.apache.mahout.cf.taste.common.TasteException:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No
operations allowed after connection closed.
org.apache.mahout.cf.taste.impl.model.jdbc.AbstractJDBCDataModel.getNumThings(AbstractJDBCDataModel.java:590)
org.apache.mahout.cf.taste.impl.model.jdbc.AbstractJDBCDataModel.getNumItems(AbstractJDBCDataModel.java:545)
org.apache.mahout.cf.taste.impl.recommender.slopeone.MemoryDiffStorage.<init>(MemoryDiffStorage.java:101)
org.muehlbachler.filmspiration.recommender.FilmspirationRecommender.createRecommender(FilmspirationRecommender.java:65)
org.muehlbachler.filmspiration.recommender.FilmspirationRecommender.<init>(FilmspirationRecommender.java:45)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
java.lang.Class.newInstance0(Class.java:355)
java.lang.Class.newInstance(Class.java:308)
org.apache.mahout.cf.taste.web.RecommenderSingleton.<init>(RecommenderSingleton.java:51)
org.apache.mahout.cf.taste.web.RecommenderSingleton.initializeIfNeeded(RecommenderSingleton.java:42)
org.apache.mahout.cf.taste.web.RecommenderServlet.init(RecommenderServlet.java:74)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:662)
*root cause*
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No
operations allowed after connection closed.
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
com.mysql.jdbc.Util.getInstance(Util.java:382)
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1013)
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
com.mysql.jdbc.ConnectionImpl.throwConnectionClosedException(ConnectionImpl.java:1213)
com.mysql.jdbc.ConnectionImpl.checkClosed(ConnectionImpl.java:1200)
com.mysql.jdbc.ConnectionImpl.prepareStatement(ConnectionImpl.java:4203)
org.apache.commons.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java:295)
org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.prepareStatement(PoolingDataSource.java:318)
org.apache.mahout.cf.taste.impl.model.jdbc.AbstractJDBCDataModel.getNumThings(AbstractJDBCDataModel.java:576)
org.apache.mahout.cf.taste.impl.model.jdbc.AbstractJDBCDataModel.getNumItems(AbstractJDBCDataModel.java:545)
org.apache.mahout.cf.taste.impl.recommender.slopeone.MemoryDiffStorage.<init>(MemoryDiffStorage.java:101)
org.muehlbachler.filmspiration.recommender.FilmspirationRecommender.createRecommender(FilmspirationRecommender.java:65)
org.muehlbachler.filmspiration.recommender.FilmspirationRecommender.<init>(FilmspirationRecommender.java:45)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
java.lang.Class.newInstance0(Class.java:355)
java.lang.Class.newInstance(Class.java:308)
org.apache.mahout.cf.taste.web.RecommenderSingleton.<init>(RecommenderSingleton.java:51)
org.apache.mahout.cf.taste.web.RecommenderSingleton.initializeIfNeeded(RecommenderSingleton.java:42)
org.apache.mahout.cf.taste.web.RecommenderServlet.init(RecommenderServlet.java:74)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:662)
So, although it worked before too that's my resource context (specified
in<tomcat-conf-dir>/context.xml):
<Resource name="jdbc/filmspiration" auth="Container"
type="javax.sql.DataSource"
username="user"
password="passwd"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/filmspiration"
maxActive="15"
maxIdle="7"/>
Am 26.02.2011 12:44, schrieb Sean Owen:
I don't know enough about your code to guess at an explanation. I don't know
whether you were actually building the diffs before as it sounds like you
were looking to build it manually or something.
I am not sure if 3GB is enough, or if it is, whether you want to spend that
much memory on diffs. You could start with a lower number like 10M.
2011/2/26 Daniel Mühlbachler<[email protected]>
Ok, that's true because I in my preferenceTable I have about 650 000
entries/ratings (~24MB) but it's curious that it worked before perfectly
without any problem and I have nothing changed on my system except the svn
update and recompilation. It also takes approximately as long as before to
build the diffs.
So, you think if I say 100 million entries should be kept about 3GB of heap
size is enough?