
java服务器
fish_cool
擅长java并发设计与开发(包括多核开发)、java性能调优、java分布式架构与设计、工作流引擎算法、python;对erlang、ada、搜索引擎有浓厚的兴趣,曾从事过数据分析与挖掘(SAS)和hadoop平台相关(hive、sqoop、R、zookeeper、mahout、Hbase等)方面的研究与开发,现阶段负责公司的整个大数据平台的搭建(包括海量实时OLAP查询、离线计算平台、实时计算平台),并朝着各平台封装成产品的方向前进
展开
-
关于java并行程序开发重点
最近在运用hadoop做分布式运算,随便也对java的并行计算框架进行复习,特总结下心得。java的并行计算框架就是Fork/Join模式,关于使用模式很简单,这里主要是关注相关关键因素。第一就是Times,运行的次数,每秒运行次数。第二就是speedups和task rates,就是加速度和每秒执行任务频率。第三就是Garbage Collection,就是GC回收效率。第四原创 2012-02-06 16:24:59 · 2827 阅读 · 8 评论 -
无穷大和NaN
在进行数据统计中,对无穷大和NaN的理解很重要,特转贴一个基本概念。 当指数E为全1时,IEEE 754规定此类存储作为特别使用,而不是普通数据。 无穷大 E=255 M=0时,用作无穷大(或Infinity、∞)。根据符号不同,又有+∞、-∞。 无穷大可以由算术运算得出,下面是有关无穷大的几个运算示例: 1/∞ = 0, -1/∞转载 2012-10-12 16:50:39 · 3912 阅读 · 1 评论 -
关于多网卡读取IP相关信息
最近集群将增加一批双网卡的机器,这时我就突然想到如何获取这些网卡的IP地址。但是第一次尝试用InetAddress没有得到预期结果。运行结果这里使用到本机(MAC OS环境)的/etc/hosts这个文件获取相关IP信息(当然InetAddress获取主机名称处理没有这么简单,这里就不详细说明)// 通过/etc/hosts来获取InetAddress[] adds = I原创 2012-09-11 13:56:54 · 1105 阅读 · 0 评论 -
Azul开源Zing Jvm
Azul Systems 工程部副总裁和合作创始人Shyam Pillalamarri向InfoQ说明道:我们的部署很大一部分基于开源组件,所以我们认为:“假设我们不能将一些有价值的东西免费提供给开源项目贡献者,他们将一直受限于从Java虚拟机(JVM)视角所看到的内容”,他们将不会考虑额外的用例,或者选择其他能解决了所有内存或扩展性问题、类似Zing的系统。如果这样的话,他们会面临堆占用转载 2012-09-07 10:26:33 · 5207 阅读 · 0 评论 -
Java 工具(jmap,jstack)在linux上的源码分析(二)信号处理
当java虚拟机启动的时候,会启动很多内部的线程,这些线程主要在thread.cpp里的create_vm方法体里实现而在thread.cpp里主要起了2个线程来处理信号相关的 JvmtiExport::enter_live_phase(); // Signal Dispatcher needs to be started before VMInit event is转载 2012-08-29 11:22:06 · 1134 阅读 · 0 评论 -
Java 工具(jmap,jstack)在linux上的源码分析(四)safe point
safe point 顾明思意,就是安全点,当需要jvm做一些操作的时候,需要把当前正在运行的线程进入一个安全点的状态(也可以说停止状态),这样才能做一些安全的操作,比如线程的dump,堆栈的信息。在jvm里面通常vm_thread(我们一直在谈论的做一些属于vm 份内事情的线程) 和cms_thread(内存回收的线程)做的操作,是需要将其他的线程通过调用SafepointSynchro转载 2012-08-29 11:52:28 · 1331 阅读 · 0 评论 -
Java 工具(jmap,jstack)在linux上的源码分析(三)执行的线程vm thread
在前面的博客中(http://blog.youkuaiyun.com/raintungli/article/details/7034005)所提到的信号转发线程,Attach Listener 线程都只是操作socket文件,并没有去执行比如stack 分析,或者heap的分析,真正的工作线程其实是vm thread.(一)启动vm threadjint Threads::create转载 2012-08-29 11:33:03 · 1404 阅读 · 0 评论 -
Java 工具(jmap,jstack)在linux上的源码分析(一)
在我们常用的Jstack, Jmap 用于分析java虚拟机的状态的工具,通过起另一个虚拟机通过运行sun.tools包下的java文件,去跟踪另一个虚拟机的状态。如果让你设计一个跟踪另一个进程的方法,你也通常会考虑这几种常用的方式。第一种,就是通知被跟踪的进程,让进程执行相应的消息,同时对该消息做出反应。第二种,就是通过内核的调用,直接能够访问进程的内存,堆栈转载 2012-08-29 11:17:13 · 1300 阅读 · 0 评论 -
系统吞吐性能优化简述
被朋友问起性能优化的东西,今天简单总结一下:一般的java系统,大体的模型如下:复杂的系统可能在application server一层有多个,简单一些的系统可能没有application server直观一点说,用户请求的执行路径就是:细化到每个server的内部,请求的执行路径就是:比如,一个业务系统,一个请求中,cpu处理时间为20ms,读取数据库总耗时为转载 2012-08-15 07:57:31 · 1070 阅读 · 0 评论 -
java服务器开发心得
本人已从事java服务器开发三年多了,对java服务器开发比较有心得,特此对这三年多来进行下技术总结,并与大家分享。作为服务器开发,对基础知识的掌握程度,将决定你的服务器各方面的能力,一般在进行java服务器开发前,最重要的是能够熟练运用以下技术:java classLoader、java thread、java I/O(NIO)和java socket。 一般来说,服务器设计大致原创 2009-08-25 21:37:00 · 32592 阅读 · 30 评论 -
Process与ProcessImpl类源码解析
因为Runtime里的exec方法与这个类关联密切,所以这里对这个类进行了分析。之前在文章《System与Runtime源码解析》里已经简单说了下这个类的用途,可以想象成一个外部应用程序的代理对象。该类是个抽象类,目前java里只有一个实现类ProcessImpl类。Process抽象类里大致提供以下一个抽象方法:几个输入/输出流waitFor方法,用来等待外部程序运行完成(是原创 2011-12-30 11:09:30 · 7377 阅读 · 0 评论 -
System与Runtime源码解析
在类加载器里提到了System与Runtime类,这里就趁热打铁来对这两个源码进行解析,因为System与Runtime关联很紧密,所以就一起来解析吧。首先来看看System类提供的几个特性:1、standard input, standard output, and error output streams2、访问扩展属性和java的环境变量3、加载本地内库4、提供一个arr原创 2011-12-14 14:13:47 · 7283 阅读 · 0 评论 -
JDK7 AIO (非阻塞IO)实现大并发TCPServer和TCPClient
JDK7 虽然已经发布了一段时间了,但是无奈,AIO相关介绍,尤其是靠谱儿的介绍实在是太少了。兄弟花了些时间,整理成册,希望对learner有些帮助。 epoll成为Linux下开发大并发web 服务器的首选已经好多年了,java世界里,直到JDK 7的AIO出现才用上了这个feature。哎!不过亡羊补牢,为时未晚,下面就看下用AIO开发一个简单的TCP Server和TCP C转载 2012-10-18 17:05:01 · 22062 阅读 · 6 评论 -
jrockit R28参数说明列表2
2 -X Command-Line OptionsThis chapter is an alphabetically ordered reference for all the -X command-line options that you can use with the JRockit JVM.The -X command-line options are exclusive to翻译 2012-11-27 15:59:46 · 2693 阅读 · 0 评论 -
jrockit之-XXexitOnOutOfMemory参数
最近在测试使用此参数的效果时,发现此参数无效。报错信息如下:[hadoop@slave8 ~]$ java -Xms:1536m -Xmx:1536m -Xns:128m -XgcPrio:pausetime -XXexitOnOutOfMemoryUnknown option or illegal argument: -XXexitOnOutOfMemory. Please chec原创 2012-11-27 10:53:39 · 2054 阅读 · 0 评论 -
5种调优Java NIO和NIO.2的方式
NIO和NIO.2对于Java平台最大的贡献是提高了Java应用开发中的一个核心组件的性能:输入/输出处理。不过这两个包都不是很好用,并且它们也不是适用于所有的场景。如果能够正确地使用的话,Java NIO和NIO.2可以大大减少一些常用I/O操作所花的时间。这就是NIO和NIO.2所具有的超能力,我会在这篇文章里向你展示5种使用它们的简单方式。变更通知(因为每个事件都需要一个监听转载 2013-01-18 14:50:57 · 2353 阅读 · 0 评论 -
Memory Analysis内存分析工具复习
最近因为系统问题,所以又对Memory Analysis工具进行复习(for eclipse的)通过dump出来的文件,然后在eclipse上用Memory Analysis工具(可以在线安装很简单)内存泄漏查找思路一:打开Leak Suspects->Problem Suspect N下的“Details”打开此页面后,有几个内容:1、引用累计关系(shortest path原创 2013-01-09 10:59:47 · 3436 阅读 · 1 评论 -
Apache Portable Runtime部署
[root@master avro_svn]$ wget http://apache.etoak.com/apr/apr-1.4.6.tar.gz[root@master avro_svn]$ tar -zxvf apr-1.4.6.tar.gz[root@master avro_svn]$ cd apr-1.4.6[root@master apr-1.4.6]$ ./config原创 2013-01-10 16:46:19 · 1045 阅读 · 0 评论 -
jrockit的jstat
关于分析命令jstat(跟sun的那个命令一样),用法很简单。这里做个简单摘要,如图: 通过命令jstat -options可得到需要分析的指标,一般我都是分析GC,例如:jstat -gc 1s 1表示对当前的进程进行1秒一次采样。 更多详细的内容,可以参考jrockit官方文档。原创 2013-01-10 10:59:16 · 2628 阅读 · 0 评论 -
jrockit的dump操作简介
jrockit的dump命令很简单,如果不熟悉。先使用命令:jrcmd help得到相关的options。然后使用选项hprofdump,使用此参数需要注意,应该使用这样的命令形式:jrcmd hprofdump filename=/home/hadoop/test.hprof如图:需要带上filename这个参数,不然不知道生成文件存放路径(另外需要绝对路径),我原创 2013-01-10 10:52:35 · 4343 阅读 · 0 评论 -
Using jstat with BEA JRockit
使用jrockit使用jstat命令的用法很简单,在liunx下使用jstat -help命令就能了解,这里不多解释,这里只是将各统计参数的说明发布下。 Statistics Options and OutputThe following table lists all available statistical options, statOption, when usin翻译 2013-01-09 10:53:20 · 1830 阅读 · 0 评论 -
运行jrockit的jrcmd常见问题
虽然jrcmd使用来剖析当前的java进程,但是在使用过程中,还是会碰到点小问题了。报错信息:Unable to open socket file: target process not responding or HotSpot VM not loaded如图:这是因为我是root用户在查看,但是12002这个进程,我是用hadoop用户启动。所以想要正确看到,需要切换到ha原创 2013-01-07 17:10:05 · 8807 阅读 · 1 评论 -
使用JRockit JVM剖析当前进程
jrockit用一个命令就可以进行相关的处理。jrcmd命令(不像SUN的,使用其他命令来区分)附录:(Sun JDK) -Xmn, -XXNewSize, -XXMaxNewSize —-> (JRockit) -Xns(Sun JDK) -XX:+UseConcMarkSweepGC —-> (JRockit) -Xgc:sin原创 2013-01-07 16:41:06 · 4067 阅读 · 0 评论 -
jrockit相关参数列表
-X的命令列表:-Xbootclasspath-Xbootclasspath/a-Xbootclasspath/p-Xcheck:jni-Xdebug-Xgc-XgcPrio (deprecated)-XlargePages-Xmanagement-Xms-Xmx-XnoClassGC (deprecated)-XnoOpt-Xns-XpauseTarget-Xrs-Xss-Xstrict原创 2012-11-14 15:42:15 · 2069 阅读 · 0 评论 -
Jrockit之Understanding JIT Compilation and Optimizations
This section offers a high-level look at how the Oracle JRockit JVM generates code. It provides information on JIT compilation and how the JVM optimizes code to ensure high performance. This section翻译 2012-11-13 11:27:50 · 926 阅读 · 0 评论 -
jrockit R28的参数说明列表
3 -XX Command-Line OptionsThis chapter describes the -XX command-line options of Oracle JRockit JVM; these options are all prefixed by-XX.To implement some of the options, specific system requir翻译 2012-11-27 15:58:17 · 3071 阅读 · 0 评论 -
类加载器的应用
之前已经对类加载器的基本原理从代码的层面进行解析,那么现在开始初步简单的介绍下如果自定义类加载器。类加载的使用经常用到的方法如下:Thread.currentThread().getContextClassLoader().loadClass("类名");Class.forName("类名"); 最近在部署一个hadoop项目,相关资料整理放缓,请耐心等原创 2011-12-15 15:13:43 · 811 阅读 · 0 评论 -
JVM类加载机制(ClassLoader)源码解析(2)
我们来对defineClass这个方法进行解析,该方法比较复杂,首先如图:该方法主要是通过一个字节的数组,对该数据进行解析、验证、二进制码格式校验。通过抛出的ClassFormatError的这个异常来看,也是验证这个类的格式是否符合JVM的规范。最终是将一个字节数组转换成类实例(注意不是实例对象,是有区别的)。目前该方法已被替代,注意上图里的注释。目前新方法,如下图:原创 2011-12-13 15:21:21 · 7047 阅读 · 0 评论 -
JVM类加载机制(ClassLoader)源码解析(3)
java的类加载器,还有一个特殊的功能,就是加载本地库。这个功能是与关键字native是有关系的。简单地说就是调用C++/C的本地库(windows是后缀为.dll,linux下是后缀为.so)。调用的地方是使用System这个类,其中有两个方法如下:load(String filename)loadLibrary(String libname)一个是根据文件名,一个根据lib原创 2011-12-13 19:00:30 · 6699 阅读 · 0 评论 -
三种主流的JVM(JDK)使用心得
目前市面上就只有三种主流的JVM:SUN、BEA和IBM。我对三种主流的JVM的都有过使用,并运用到实际的项目当中,来谈谈使用它们的感受。 首先来谈谈SUN的JVM这个JVM是大家在开发过程中普遍用的比较多的一个,我的开发过程中也是用它居多,总体感觉一般,没有比较特别的地方。因为一个是其GC回收机制,一个是其本身的BUG问题。先来说下BUG问题,我是在06年底,就采用了JDK1.5的版本来进行项目原创 2009-10-24 11:25:00 · 11980 阅读 · 2 评论 -
服务器开发总结
技术总结原创 2010-06-05 00:40:00 · 8624 阅读 · 0 评论 -
基于MINA构建简单高性能的NIO应用
mina是非常好的C/S架构的java服务器,这里转了一篇关于它的使用感受。 前言MINA是Trustin Lee最新制作的<span class="t_tag" onclick="function onclick(){tagshow(event)}">Java通讯<span class="t_tag" onclick="function onclick(){tagsh转载 2010-03-03 13:23:00 · 17369 阅读 · 5 评论 -
Direct vs non-direct ByteBuffer
转载于:http://crmky.spaces.live.com/Blog/cns!8C989768DB1A6B14!458.entry?sa=254330365这两种类型的ByteBuffer相信大家都知道,但是两者的区别在什么地方呢?在不同的环境下采用哪种类型的ByteBuffer会更有效率呢?先解释一下两者的区别: Non-direct ByteBuffer内存是分配在堆上的,直接由转载 2010-03-03 20:02:00 · 3162 阅读 · 0 评论 -
JVM启动参数大全
jdk1.4.2 JVM官方地址:http://java.sun.com/j2se/1.4.2/docs/guide/vm/index.html标准和非标注参数(for windows):http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/java.html 非stable参数:http://java.sun.com/javase/techno转载 2010-02-08 09:49:00 · 1635 阅读 · 0 评论 -
PermGen Space情况
最近这段时间,服务器运行时出现了PermGen Space的情况,之前也遇到过。是因为cglib的使用不当导致。但是这次并没有使用cglib的相关类库。报错的日志信息也特别奇怪,日志信息如下:java.lang.OutOfMemoryError: PermGen spaceat java.lang.Class.getDeclaredMethods0(Native Method)at jav原创 2010-02-06 19:26:00 · 2510 阅读 · 1 评论 -
Java内存溢出分类
关于Java溢出分类,我经常碰到的是两类:一类是java.lang.OutOfMemoryError: Java heap space,一类是java.lang.OutOfMemoryError: PermGen space。在这两类中,前者碰见的次数比较频繁。因为导致Java heap space的情况,有时候并不是内存不够,它也会抛此错误信息。例如我就碰到过这样的情况,我当时通过GC日志发原创 2010-02-02 21:02:00 · 1374 阅读 · 0 评论 -
java内存分布
在JAVA中,有六个不同的地方可以存储数据:1. 寄存器(register)。这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直接控制 ,也不能在程序中感觉到寄存器存在的任何迹象。2. 堆栈(stack)。位于通用RAM中,但通过它的“堆栈指针”可以从处理器哪里获得支持。堆栈指针若向下移动,则分配新的内存;若原创 2010-02-02 13:44:00 · 760 阅读 · 1 评论 -
Java线程使用
关于线程是Java语言中很重要的一块,在程序中有很多地方也使用线程。但是真正考虑如何在适合的场合使用线程呢?采用线程最明显的就是用于异步操作处理。那么为何要使用异步方式呢?先来介绍下为什么有了进程,还需要线程。第一:并行实体共享同一个地址空间和所有可用数据的能力。第二:线程比进程更轻量级,比进程更容易创建,也更容易撤销。第三:主要是涉及性能方面。 关于性能又涉及到线程的行为原创 2010-01-31 20:51:00 · 801 阅读 · 0 评论 -
Java内存管理
今天主要想总结下关于Java内存的管理,很多初学者认为java不会有泄漏情况出现,但是在实际的开发过程中并不是这样。目前至少在我的开发和维护过程中已经碰到几次了。而且越到后面,随着代码的增加将越难查出问题所在(我其中所维护的一个Java服务器有接近十万行的代码量,基本全部的基础框架都是自己开发的,没有大量的使用第三方库)。网上介绍Java内存的理论和结构分区有很多,在这我就不细说了。不过理论跟原创 2010-01-27 22:28:00 · 2107 阅读 · 0 评论 -
Java 6 JVM参数选项大全(中文版)
Java 6 JVM参数选项大全(中文版) 作者:Ken WuEmail: ken.wug@gmail.com转载本文档请注明原文链接 http://kenwublog.com/docs/java6-jvm-options-chinese-edition.htm! 本文是基于最新的SUN官方文档Java SE 6 Hotspot VM Options 编写的译文。主要介绍J转载 2011-11-01 10:26:32 · 1149 阅读 · 0 评论