在Java中,java agent和java反射调用一样,都是非常重要的特性,利用这种语言特性,可以做一些有意思的工作。比如说线程间传递threadlocal,又或者运行时AOP。除了功能以外,另一点也很重要:java agent是使用java语言开发。对于java程序员来讲,门槛并不高。
在Java中,java agent和java反射调用一样,都是非常重要的特性,利用这种语言特性,可以做一些有意思的工作。比如说线程间传递threadlocal,又或者运行时AOP。除了功能以外,另一点也很重要:java agent是使用java语言开发。对于java程序员来讲,门槛并不高。
在现在流行的服务化调用场景中,为了避免服务的单点问题,会将服务部署成一个集群,然后利用服务注册中心来解决服务发现问题。
为了解决服务注册中心的单点问题,有时候会选择古老的dns轮询。
通过将一个域名关联多条A记录,利用域名服务器每次的不同返回,达到软负载的效果。
关于jdk的dns解析,网上有很多文章介绍,有对的地方也有错的。
前段时间,同事遇到Java的GC问题,现象表现为:gc时间越来越长(也包括young gc);触发一次full gc之后,会变得好点,但是这次full gc长的不能忍受。他们使用的jdk 8,应用内存8G,尝试调整了很多参数,用了ParNew算法,也试过G1算法,都没有太大好转。困扰很久之后找我帮忙看一下,所以也就有了这篇文章^_^
GC对于我们来说相对黑盒,尤其是young gc的问题,幸运的是这次解决非常快且没依赖Google。对我而言,主要是解决问题过程中的思路,值得记录下来。至于gc的根本原因,事后我找到了笨神的博客
在上一篇中已经提到了safe point,必须强调这是一个很重要的概念,不仅对Jvm,也对所有运行在jvm上的Java应用。从Jvm的角度来看,到达safe point之后,Jvm会开始做一些有意义的事(比如gc);从应用的角度来看,达到safe point意味着工作线程会产生停顿,即常说的“stop the world”。当下所有Jvm的具体实现都有这样的概念(比如Hotspot、Zing),了解一点相关的知识对我们的编程以及调优都很有帮助。
事情缘起一段性能测试代码,主要是探讨在循环中索引键类型的选择,int vs long 哪个更好?本文和应用层面无关,只是探讨2种类型的迭代在某些场景对性能的影响。希望经过分析之后,能对我们平时的编程带来一些帮助;或者提供一些对safe point的认识。下面开始进入真正的主题……
最近在使用rabbitmq java client时,有小伙伴在mac上写了一段代码,发现当创建一个连接到rabbitmq-server时就会报错bad file descriptor
,虽然在linux服务器上没有出现这个问题,但为了安全,还是花了点时间进行调查。
之前有讨论hostname在jdk中是怎么使用的,这回想说的是,在linux机器上,关于hostname相关的一些tips,都是很简单的常识,但了解它们有时候会给我们查问题带来帮助。