首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

哇咔咔干货来啦!PowerJob 原理剖析之 Akka Toolkit

上面这段文字摘抄自 Akka 官网(akka.io),翻译成中文也就是:“Akka 是一个 Java 和 Scala 构建高并发、分布式和弹性消息驱动应用程序的工具包”。...这里结合我自己的理解用白话文讲一下:其实 Actor 模型的设计思想就是事件驱动,可以简单理解线程级的消息中间件。...此外,由于 Actor 模型中万物都是 Actor,所以它是天然支持分布式的,即不同机器之间的 Actor 通讯和本地 Actor 之间的通讯没有实质上的区别。...akka-remote(artery-remoting):通讯组件,也是 PowerJob 所使用的核心组件,然而官网并不推荐直接使用(直接使用 remote 启动还会警告使用了过于底层的 API),普通分布式应用推荐直接使用...(actorPath); actorSelect.tell(startTaskReq, null); 和其他通讯方式一样,进行通讯前,需要首先获取目标地址。

1.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

Akka 指南 之「Actors」

Akka 的 Actors API 类似于 Scala Actors,它从 Erlang 中借用了一些语法。...另一方面,ActorSelection指向路径(或者如果使用通配符,则指向多个路径),并且完全忽略了具体化当前正在占用的路径。由于这个原因,ActorSelection不能被观看。...这也意味着ActorSystem将在最后一个阶段终止。默认情况下,不会强制停止 JVM(如果终止了所有非守护进程线程,则会停止 JVM)。...此行为可以通过以下方式禁用: akka.coordinated-shutdown.run-by-jvm-shutdown-hook=off 如果你有特定于应用程序的 JVM 关闭钩子,建议你通过CoordinatedShutdown...对它们进行注册,以便它们在 Akka 内部关闭钩子之前运行,例如关闭 Akka 远程处理。

4K30

java常见的几种内存溢出和解决方案

1.JVM Heap(堆)溢出:java.lang.OutOfMemoryError: Java heap space JVM在启动的时候会自动设置JVM Heap的值, 可以利用JVM提供的-Xmn...为什么会内存溢出,这是由于这块内存主要是被JVM存放Class和Meta信息的,Class在被Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同,sun的 GC...3.栈溢出: java.lang.StackOverflowError : Thread Stack space 栈溢出了,JVM依然是采用栈式的虚拟机,这个和C和Pascal都是一样的。...这一般是启动程序时一些定时器或其他正在操作的线程还没有停掉造成的。 解决方法:实现ServletContextListener的监听,在contextDestroyed方法中进行关闭。 5....-XX:PermSize:设定内存的永久保存区初始大小,缺省值64M。 -XX:MaxPermSize:设定内存的永久保存区最大大小,缺省值64M。

1.6K20

Akka 指南 之「Actor 引用、路径和地址」

根据 Actor 系统的配置,支持几种不同类型的 Actor 引用: 纯本地 Actor 引用由未配置支持网络功能的 Actor 系统使用。...如果通过网络连接发送到远程 JVM,这些 Actor 引用将不起作用。 启用远程处理时,支持网络功能的 Actor 系统使用本地 Actor 引用,这些引用表示同一个 JVM 中的 Actor。...DeadLetterActorRef是死信服务的默认实现,Akka 将其目的地关闭或不存在的所有消息路由到该服务。...由于 Actor 是以严格的层次结构方式创建的,因此存在一个唯一的 Actor 名称序列,该序列通过递归地沿着子级和父级之间的监督链接向下到 Actor 系统的根来给出。...由于与选定内容匹配的 Actor 的确切集合可能会发生变化,即使消息正在传递给收件人,也不可能观看选定内容的实时变化。

1.7K20

JAVA系列之JVM内存调优

关闭虚拟机就会释放这个区域的内存。 当发现系统中元空间占用内存比较大时,排查方向是否加载了大量的第三方jar包,Tomcat部署了太多应用,大量动态生成的反射类等。...一般配置与-Xmx相同,避免每次垃圾回收完成后JVM重新分配内存。 -Xmn2g:设置年轻代大小2G。整个堆大小=年轻代大小 + 年老代大小,所以增大年轻代后,将会减小年老代大小。...可与CMS收集同时使用 -XX:CMSFullGCsBeforeCompaction:由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。...用于查看老生代及持久代垃圾收集的情况 -gcoldcapacity 用于查看老生代的容量 -gcutil 显示垃圾收集信息 -gccause 显示垃圾回收的相关信息(通-gcutil),同时显示最后一次仅当前正在发生的垃圾收集的原因...Dcom.sun.management.jmxremote.port=60001 //监控的端口号 -Dcom.sun.management.jmxremote.authenticate=false //关闭认证

54350

《深入理解java虚拟机》笔记(3)实战:OutOfMemoryError异常

二、虚拟机栈和本地方法栈的溢出 由于HotSpot虚拟机不区分虚拟机栈和本地方法栈,因此不需要设置-Xoss参数,栈容量只由-Xss参数设定。...oom.stackLength); throw e; } } } 执行结果: stack length:2101 Exception in thread "main" java.lang.StackOverflowError...单个线程下,无论是由于栈帧太大还是虚拟机栈容量太小,虚拟机抛出的都是StackOverflowError。 如果虚拟机扩展栈时,无法申请到足够的空间,将抛出OutOfMemoryError异常。...Unsafe.class.getDeclaredFields()[0]; unsafeFiled.setAccessible(true); Unsafe unsafe = (Unsafe)unsafeFiled.get(null...DirectMemoryOOM.main(DirectMemoryOOM.java:22) 由DirectMemory导致的内存溢出,明显特征是在Heap Dump文件中不会看见明显的异常,如果发现Dump文件很小,而程序直接或间接使用了

25560

java虚拟机栈解读

虚拟机栈出现的背景 由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计基于寄存器的。...初步印象  有不少Java开发人员一提到Java内存结构,就会非常粗粒度地将JVM中的内存区理解仅有Java堆(heap)和Java栈(stack)?为什么? ...String[] args) { test(); } public static void test() { test(); } //抛出异常:Exception in thread"main"java.lang.StackoverflowError...在这个线程上正在执行的每个方法都各自对应一个栈帧(Stack Frame)。 栈帧是一个内存区块,是一个数据集,维系着方法执行过程中的各种数据信息。...如果当前方法调用了其他方法,方法返回之际,当前栈帧会传回此方法的执行结果给前一个栈帧,接着,虚拟机会丢弃当前栈帧,使得前一个栈帧重新成为当前栈帧。

15820

JVM如何确定垃圾以及常用参数

2、可达性分析(根搜索路径) 为了解决引用计数法的循环引用问题,Java使用了可达性分析的方法。 所谓“GC roots”或者tracing GC的“根集合”就是一组必须活跃的引用。...:第一次使用就编译成本地代码 -Xmixed:混合模式 3、xx参数 a、Boolean类型 -XX:+或者-某个属性值,+表示开启 -表示关闭。...对于一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用域或者显示地将相应(强)引用赋值null,一般认为就是可以被垃圾收集的了(当然具体回收时还要看垃圾收集策略)。...PhantomReference的get方法总是返回null,因此无法访问对应的引用对象。...ByteBuffer.allocate(capability)第一种方式是分配JVM堆内存,属于GC管辖范围,由于需要拷贝所以速度相对较慢。

77950

Elasticsearch运维指南

由于节 点丢失⽽移动的分⽚计数。 Initializing Shards:初始化分⽚。由于添加索引等⽽初始化的分⽚计数。 Unassigned Shards:未分配的分⽚。...集群当前正在处理的查询计数。 fetch_current:当前正在进⾏的fetch次数。集群中正在进⾏的fetch计数。 query_total:查询总数。集群处理的所有查询的聚合数。...汇总所有花在刷新的时间(以毫秒单位进⾏测 量)。 merges.current_docs:⽬前的合并。合并⽬前正在处理中。 merges.total_docs:合并总数。合并总数的计数。...正在使⽤的内存百分⽐。 max : 最⼤RAM。 节点主机上的内存总量 cpu:中央处理器。正在使⽤的CPU百分⽐。...#4.request circuit breaker request circuit breaker可以阻⽌由于某个请求对应的⼀些数据结构造成的OOM(⽐如⼀个聚合请求可能 会⽤jvm内存来做⼀些汇总计算

2.4K23

Akka 指南 之「集群客户端」

这就产生了紧密耦合,因为客户端和集群系统可能需要具有相同版本的 Akka、库、消息类、序列化程序,甚至可能是 JVM。...此外,由于 Akka 远程处理(Remoting)主要设计 Akka 群集的协议,因此没有明确的资源管理,当使用了ClusterClient时,它将导致与群集的连接,直到ActorSystem停止(与其他类型的网络客户端不同...ClusterClient.Publish:消息将传递给所有已注册命名主题订阅者的收件人 Actor。...reconnect-timeout = off } 故障处理 启动集群客户端时,必须其提供一个初始连接点列表,这些连接点是正在运行接待员的集群节点。...当从某种服务注册表提供初始连接点、群集节点地址完全是动态的、整个群集可能关闭或崩溃、在新地址上重新启动时,这可能很有用。

1.8K30

JVM (Hot Sport 版)

数组下标越界的检查 内存泄漏 说明:内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。...每个线程运行需要的内存空间,称为虚拟机栈 每个栈由多个栈帧(Frame)组成,对应着每次调用方法时所占用的内存 每个线程只能有一个活动栈帧(顶部的栈帧就是活动栈帧 如下图 栈帧4 就是活动栈帧),对应着当前正在执行的方法...3)方法呢的局部变量是否线程安全 如果方法内部的变量没有逃离方法的作用访问,它是线程安全的 如果是局部变量引用了对象,并逃离了方法的访问,那就要考虑线程安全问题。...递归调用导致栈帧过多,栈帧过大、或者第三方类库操作,都有可能造成栈内存溢出 java.lang.stackOverflowError ,推荐使用 -Xss256k 指定栈内存大小!...1024 * 1024 * 10]; System.out.println("in 2"); Thread.sleep(30000); bytes = null

26720

Akka 指南 之「集群的使用方法」

由于代码和部署单元的物理分离,有一种错误的自主权感,但是由于一个服务的实现中的更改泄漏到其他服务的行为中,你很可能会遇到问题。...当中止时,它将运行「Coordinated Shutdown」,默认情况下将终止ActorSystem。也可以将 Coordinated Shutdown 配置退出 JVM。...注释:对于集群中的所有成员,ActorSystem的名称必须相同。当你启动ActorSystem时,将给出ActorSystem的名称。...由于这些问题,auto-downing不应该在生产环境中使用。 Leaving 从集群中删除成员有两种方法。 你可以停止 Actor 系统(或 JVM 进程)。...ClusterEvent.MemberExited,某个成员正在离开集群,其状态已更改为Exiting。请注意,在另一个节点上发布此事件时,该节点可能已关闭

4.6K60

使用Akka HTTP构建微服务:CDC方法

现在,您可以尝试编译并执行测试,但由于我们没有客户端和模型,所以我们需要添加基本逻辑来让测试通过。...并且我使用了隐式声明依赖关系,但可以显性地提高代码的可读性。..._提供转换的所有功能; 在这种情况下,我正在使用toJson寻找它将要转换的特定对象的协议(或格式)的隐式定义。...我们可以通过多种方式做到这一点,我我选择了安全和简单的解决方案,即在生产中启动服务器,调用之前执行测试MyLibraryAppServer的主要方法,并且之后关闭它。...正如您所看到的,我使用Slick提供的基本方法,并且由于实体Categories和模型Category相互关联,因此DAO可以直接返回模型而不显式转换。

7.4K50

Java中的堆栈和堆内存

由于开发Java语言和平台JVM的人员都是同一组人,因此对程序员便利性的偏见是显而易见的。这导致了巨大的演变;从一种语言开始,今天Java已经成为自己的生态系统。...JVM可以同时执行多个执行线程。这意味着每个线程都有自己的pc(程序计数器)寄存器来维护当前正在执行的指令的位置,以及一个用于保存静态内存分配的堆栈。 什么是Java中的堆栈内存?...由于每个线程都维护一个私有的JVM堆栈,因此它用于存储与其静态内存分配相关的变量。我们在代码中声明和使用的特定于方法的原始变量实际上存储在堆栈区域中。...此内存在运行时用于对象分配内存。因此,对象实例化可以是用户定义的类、JDK或其他库类。简而言之,使用新关键字创建的任何对象都存储在堆内存中。JVM运行的所有线程都可以访问堆内存中的对象。...因此,为了保持JVM提供的效率,在堆中使用了一个名为StringPool的特殊内存区域。JVM将创建的任何字符串对象存储在StringPool中。与堆中创建的其他对象相比,这提高了性能。

1.2K10

JVM的深入理解

它主要包含两个部分,jvm 的标准实现和 Java 的一些基本类库。它相对于 jvm 来说,多出来的是一部分的 Java 类库。...所以说,jvm 是 Java 能够跨平台的核心,具体的下文会详细说明。 这三者的关系是:一层层的嵌套关系。JDK>JRE>JVM。...System.out.println("递归次数:"+test.depth); } } } 执行结果: 递归次数:982 Exception in thread "main" java.lang.StackOverflowError...) at com.ghs.test.StackSOFTest.sofMethod(StackSOFTest.java:9) ……后续堆栈信息省略 我们可以看到,sofMethod()方法递归调用了...如果正在执行native 方法,这个计数器的值undefined 此区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域 虚拟机栈:Java方法执行的栈帧

32820

10种常见OOM分析——手把手教你写bug

无法对其自动回收,常见于使用了 File 等资源没有回收 2.3 解决方案 针对大部分情况,通常只需要通过 -Xmx 参数调高 JVM 堆内存空间即可。...如果是内存泄漏,需要找到持有的对象,修改代码设计,比如关闭没有释放的连接 [img] 面试官:说说内存泄露和内存溢出 加送个知识点,三连的终将成为大神~~ 内存泄露和内存溢出 内存溢出(out of memory...(capability)是分配 OS 本地内存,不属于 GC 管辖范围,由于不需要内存拷贝所以速度相对较快; 如果不断分配本地内存,堆内存很少使用,那么 JVM 就不需要执行 GC,DirectByteBuffer...对象就不会被回收,这时虽然堆内存充足,但本地内存可能已经不够用了,就会出现 OOM,本地直接内存溢出。...JVM 在为数组分配内存前,会检查要分配的数据结构在系统中是否可寻址,通常 Integer.MAX_VALUE-2。

78541
领券