`
jilen
  • 浏览: 98304 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Scala actor gc 问题

阅读更多

          scala原生的acotor在任务结束之后并不会被回收,这也就是说,我无法无限制的创建actor。例如在一个HTTP服务器中,如果每个请求都创建一个新的actor处理,这样不久之后就会内存溢出。今天对scala和akka的actor内存使用情况做了简单测试

 测试代码如下

 

import akka.actor.Actor
import akka.actor.Actor.spawn
import akka.actor.PoisonPill
import java.io.FileOutputStream
import java.io.OutputStream
import java.io.OutputStreamWriter

case class Work(val index: Int, val output: OutputStream)
case class Result(val value: Double)

object Task {
  def main(args: Array[String]) {
    Thread.sleep(15000)
    new AkkaActorTask(10000000).execute()
  }
}

trait CalculateTask {
  val output: OutputStream
  val taskCount: Int
  def sendWork(work: Work)
  def execute() {
    for (i <- 1 to taskCount) {
      sendWork(Work(i, output))
    }
  }

}

class AkkaActorTask(val taskCount: Int) extends CalculateTask {
  val output = Work.akkaTaskOutput
  def sendWork(work: Work) {
    spawn {
      Work.doWork(work)
    }
  }

}

class ScalaActorTask(val taskCount: Int) extends CalculateTask {
  override val output = Work.scalaTaskOutput
  def sendWork(work: Work) {
    val actor = new ScalaActorWorker
    actor.start()
    actor ! work
  }

  class ScalaActorWorker extends scala.actors.Actor {
    def act = {
      react {
        case work:Work => Work.doWork(work); exit()
      }
    }
  }
}

object Work {
  val resultName = "result-"
  val akkaTaskOutput = new FileOutputStream(resultName + "akka")
  val scalaTaskOutput = new FileOutputStream(resultName + "scala")

  def doWork(work: Work) {
    work.output.write("log(%d) = %f".format(work.index, math.log(work.index)).getBytes())
    work.output.flush()
  }
}

 

程序说明:

 计算从0到10,000,000的整形的自然对数(math.log)并写入文件

分别选择Scala和Akka的actor实现,(spwan是一种一次性非常轻量级的akka actor)

下面是测试结果,

 

机器配置

CPU:Intel(R) Core(TM)2 Duo CPU     E8400  @ 3.00GHz

RAM :4G

JAVA_OPTS: Xms100m Xmx100m

 

Akka actor performance

没有内存泄漏,100m可以负荷连续不断的actor创建

 

 

Scala actor performance

 



执行没多久就outOfMemory 

 

 

可以很明显看到scala actor gc的问题,即使exit了,也不会被回收。官方的说法是一个actor exit之后甚至可能被重新start。

 

scala.concurrent.ops也有个spawn方法可以执行异步操作http://www.scala-lang.org/api/current/index.html#scala.concurrent.ops$

  • 大小: 51.1 KB
  • 大小: 32 KB
分享到:
评论
2 楼 jilen 2011-12-08  
andiyang 写道
兄弟这个是用什么工具测试的

JvisualVm
1 楼 andiyang 2011-12-07  
兄弟这个是用什么工具测试的

相关推荐

    用Scala写的akka actor简单demo

    标题中的“用Scala写的akka actor简单demo”指的是一个使用Scala编程语言编写的Akka Actor系统的基本示例。Akka是轻量级、基于actor模型的框架,它用于构建高度并发、分布式和容错的应用程序。Scala是多范式编程语言...

    响应式架构 消息模式Actor实现与Scala.Akka应用集成

    消息模式的Actor实现是响应式架构中的一个重要组件,而Akka框架则是Scala语言中实现这一模式的首选工具。 Akka是由Lightbend公司开发的一个开源框架,专门用于构建高度并发、分布式和容错的系统。它基于Actor模型,...

    scala-actors-2.10 jar包

    scala-actors-2.10 jar包,可以解决 scala-actors-2.10以上版本带来的不兼容问题

    Artima.Actors.in.Scala.Mar.2011

    ### 关于《Scala中的Actor模型》 #### 一、引言 《Scala中的Actor模型》是一本由Philipp Haller和Frank Sommers合著的专业书籍,该书详细介绍了Scala语言中Actor模型的基础理论与实际应用。Philipp Haller不仅是...

    响应式架构++消息模式Actor实现与Scala.Akka应用集成+,沃恩·弗农+

    通过阅读这本书,开发者不仅可以学习到如何使用Scala和Akka构建响应式系统,还能理解如何利用消息模式和Actor模型来解决并发问题,提升系统的弹性和可靠性。对于想要深入理解并发编程和分布式系统的人来说,这是一本...

    响应式架构小模式Actor实现与scala

    根据提供的文件信息,我们可以提炼出几个关键知识点,重点聚焦于“响应式架构”、“消息模式Actor”以及“Scala”和“Akka应用集成”。虽然提供的内容部分并非技术性内容,而是与电子版图书获取相关的信息,但我们仍...

    Scala编程详解 第21讲-Scala编程详解:Actor入门 共8页.pptx

    Scala中的Actor模型是其并发编程的核心机制,它是基于消息传递的并发模型,旨在解决多线程编程中常见的竞态条件、死锁等问题。Actor系统允许程序在安全的环境中并行运行,通过异步消息传递来交换信息,避免了共享...

    响应式架构 消息模式Actor实现与Scala.Akka应用集成 ,沃恩·弗农

    在Scala中,创建和使用Actor非常直观,可以利用ActorSystem来启动和管理Actor,通过定义消息类型和Actor的行为来实现业务逻辑。 在响应式架构中,Actor模型扮演着关键角色,因为它们能够有效地处理异步事件,这正是...

    scala sdk scala-2.12.3

    10. **Actor模型**:Akka库是Scala中的并发和分布式计算框架,基于Actor模型,使得编写高性能、容错的应用程序变得简单。 11. **Dotty/Scala 3**:虽然Scala-2.12.3是当前版本,但Scala社区正在开发下一代Scala,即...

    scala编程基础

    ### Scala编程基础之Actor并发编程 #### 一、Scala Actor并发编程概述 ##### 1.1 什么是Scala Actor 在Scala中,Actor是一种强大的并行编程模型,它基于事件驱动和消息传递机制。通过Actor,我们可以更加简洁和...

    scala实战高清讲解

    - Actor模型:Scala的Akka库提供了一种基于Actor的并发模型,Actor是轻量级的线程,通过消息传递实现通信,避免了共享状态问题。 - Futures和Promises:Futures用于异步计算,而Promises用于创建Futures,两者结合...

    响应式架构 消息模式Actor实现与Scala.Akka应用集成.rar

    《响应式架构:消息模式Actor实现与Scala、Akka应用集成》由10章构成,详细介绍了使用Actor模型中的响应式消息传输模式的理论和实用技巧。其中包括:Actor模型和响应式软件的主要概念、Scala语言的基础知识、Akka...

    最好的scala学习 课件

    "Scala进阶之路-part04-Akka Actor.pdf"专注于Akka框架,这是Scala中用于构建分布式、容错系统的工具。Actor模型是Akka的核心,它提供了并发和并行处理的能力。在这里,你会学习到如何创建和管理Actor,理解Actor...

    scala3 scala3 scala3 scala3 scala3

    Scala3,也被称为Scala 3或Dotty,是Scala编程语言的一个重大更新,旨在提高其简洁性、可读性和类型安全性。Scala3的发布标志着该语言的进一步成熟,它引入了一系列改进,旨在解决早期版本中的一些痛点,同时保持对...

Global site tag (gtag.js) - Google Analytics