2016-04-10 76 views
1

Basit bir web hizmetini, Spray ve Slick kullanarak, Spark ML Tahmin Boru Hattı aracılığıyla gelen bir isteği ileten başarılı bir şekilde uyguladım. Veri katmanı eklemeye kadar her şey iyi çalışıyordu. Slick'i seçtim, popüler gibi görünüyor. Bununla birlikte, doğru şekilde çalışamıyorum. Kodumun çoğunu Hello-Slick Activator Template'a dayandırıyorum. Ben şöyle bir DAO nesne kullanın:Sprey, Kaygan, Spark - OutOfMemoryError: PermGen alanı

object dataDAO { 
    val datum = TableQuery[Datum] 

    def dbInit = { 
    val db = Database.forConfig("h2mem1") 
    try { 
     Await.result(db.run(DBIO.seq(
     datum.schema.create 
    )), Duration.Inf) 
    } finally db.close 
    } 

    def insertData(data: Data) = { 
    val db = Database.forConfig("h2mem1") 
    try { 
     Await.result(db.run(DBIO.seq(
     datum += data, 
     datum.result.map(println) 
    )), Duration.Inf) 
    } finally db.close 
    } 
} 

case class Data(data1: String, data2: String) 

class Datum(tag: Tag) extends Table[Data](tag, "DATUM") { 
    def data1 = column[String]("DATA_ONE", O.PrimaryKey) 
    def data2 = column[String]("DATA_TWO") 
    def * = (data1, data2) <> (Data.tupled, Data.unapply) 
} 

benim Boot nesnesinde benim veritabanını başlatmak

object Boot extends App { 
    implicit val system = ActorSystem("raatl-demo") 
    Classifier.initializeData 
    PredictionDAO.dbInit 
    // More service initialization code ... 
} 

benim veritabanına bir kayıt eklemeyi deneyin hizmet isteği

val predictionRoute = { 
    path("data") { 
    get { 
     parameter('q) { query => 
     // do Spark stuff to get prediction 
     DataDAO.insertData(data) 
     respondWithMediaType(`application/json`) { 
      complete { 
      DataJson(data1, data2) 
      } 
     } 
    } 
    } 
} 
tamamlamadan önce

Hizmetime bir istek gönderdiğimde benim uygulama çöküyor

java.lang.OutOfMemoryError: PermGen space

Slick API'sini hatalı uyguladığımdan şüpheliyim. Belgeleri anlatmak zor, çünkü tüm işlemleri ana yönteme dahil ediyor.

Son olarak, benim conf Herkes önce bu karşılaştı

h2mem1 = { 
    url = "jdbc:h2:mem:raatl" 
    driver = org.h2.Driver 
    connectionPool = disabled 
    keepAliveConnection = true 
} 

aktivatör ui aynıdır? Slick 3.1

kullanıyorum
+0

en kolay yolu için . – maasg

cevap

3

java.lang.OutOfMemoryError: PermGen space normalde kullanımınızla ilgili bir sorun değil, işte oracle says about this.

The detail message PermGen space indicates that the permanent generation is full. The permanent generation is the area of the heap where class and method objects are stored. If an application loads a very large number of classes, then the size of the permanent generation might need to be increased using the -XX:MaxPermSize option.

Bunun Slick API'sinin yanlış uygulanması nedeniyle olduğunu sanmıyorum. Bu muhtemelen, birçok sınıfı yükleyen birden çok çerçeveyi kullandığınız için olur.

Seçenekleriniz şunlardır:

+1

Java 8 ve voila olarak değiştirildi! –