Posts
深入jvm-2
hello world程序会启动几个线程? mkdir hello-world cd hello-world gradle init --type java-application cat src/main/java/App.java /* * This Java source …深入jvm-1
初探字节码与jvm public class Foo { public static void main(String[] args) { boolean flag = true; if (flag) { System.out.println("Hello, Java!"); } …容器(docker)中运行java需关注的几个小问题
简介 container: 资源隔离、平台无关, 限制cpu、mem等资源 Java: 平台无关、Write once, run anywhere、WORA java不知道自己运行在container里,以为它看到的资源都能用。结果:java …api接口中设置double浮点类数的最大小数位
java开发的restful api中,偶尔需要将最大有效位限制在一个固定的范围内,如:最多保留小数点后4位。 一番dig后,整理一个简单方案记录如下: SerializeConfig.getGlobalInstance().put(Double.class, new …使用golang采集进程的fd导致cpu飘高问题
监控业务agent使用golang实现的进程监控数据采集,部分线上ha和nginx部分机器10s周期的进程数据采集时agent cpu消耗周期性飘高。 第一个版本实现: func CalculateFd(pid string) (netFdNum uint, fileFdNum …2017读书单
今年读的几本书 人文 美国种族简史 动物农场 霍乱时期的爱情 苏菲的世界 科技 How to Design Programs, Second Edition 算法(第4版)golang server graceful shutdown
实现go语言serverd的优雅退出。 package main // demo.go // qudongfang@gmail.com import ( log "github.com/cihub/seelog" "os" "os/signal" "syscall" …容器内外统一的taskset命令
监控业务agent部署时,为避免影响业务方计算资源,一般会对agent做cpu taskset限制。 现在遇到的问题是,agent的启动环境复杂,对于tasket来说物理机和虚拟机都很简单。然而容器就不同了, 许多种container解决方案下,容器内的进程看到的cpu都是其宿主 …2016读书单
今年读的几本书 人文 月亮和六个便士 近距离看美国1 相约星期二 禅与摩托车维修艺术 知日!知日!这次彻底了解日本1-4 科技 Core Java for the Impatient The Little Go Book Go Bootcamp使用文件锁防止进程被启多个
基本原理:进程启动时尝试锁住自己的二进制,启动脚本通过flock命令检查二进制是否被锁。 package main // demo.go // qudongfang@gmail.com import ( "os" "syscall" "time" log …使用简单shell实现服务进程的守护
有这样一种需求:假如服务(模块)进程异常退出了,自动重启它。 社区有许多成熟的方案,常用的有以下几个: daemontools 老牌supervise,c/c++社区 monit ruby社区用的多,附带比较多监控功能 commons-daemon java社区常用 akuma …adoptopenjdk官方文档-进阶
编译过程性能优化的命令行参数 AdoptOpenJDK wiki的一个链接,提供了几个怎么提高编译过程性能的例子。 编译 jcov 项目首页(项目信息, 编译指南, 其他…) …Java 9中将移除 Sun.misc.Unsafe(译)
灾难将至,Java 9中将移除 Sun.misc.Unsafe Oracle 正在计划在Java 9中去掉sun.misc.Unsafe
API。 这绝对将是一场灾难,有可能会彻底破坏整个 java 生态圈。 几乎每个使用 java开发的工具、软件基础设施、高性能开发库都在底层 …来自oracle labs 的虚拟机探索工具graal
工作中 java 用的多一些, 难免想深入了解jvmn;搞下来 openjdk 8/9 的代码自己编译下,随便翻一翻,终究没啥大的收获。 前几天随意翻openjdk 文档,看到了个叫 graal的东西。就尝试搞一下看,能不能学点儿东西。 graal 是什么 一个使用 java 写 …一个由thrift 默认参数引发的血案
公司引入 thrift 做后端 server 之间的 rpc 框架,一个rpc sever 模块在阿里云部署的两台机器稳定运行两天后在流量低峰期诡异的退出了。 thrift server 类型与 阿里云 ECS 配置 TThreadedSelectorServer CPU2核、 …2015读书单
今年读的几本书 人文 蝇王 当我谈跑步时我谈些什么 富兰克林自传 三体I、II、III 富爸爸,穷爸爸 科技 Spring in actionjava server graceful shutdown
目的 避免kill -9导致内存中数据丢失,导致业务数据不一致的情况 实践 Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { // do sth } }); 参考 1tomcat连接器选择
推荐 nio2(tomcat 7 only) nio 配置方法 tomcat 8: protocol="org.apache.coyote.http11.Http11Nio2Protocol" tomcat 7: …basic guava tutuorials
整理下自己学习guava使用的资料 http://www.tutorialspoint.com/guava/index.htm JavaCachingwithGuava Anoverviewofguavagooglecorelibrariesforjavakafka producer源码分析
周末闲来无事把前两天看的kafka producer源码工作流程整理了一下,便于后续工作和学习。 kafka producer源码分析jdk 1.8 java.util.concurrent.atomic.* 源码阅读
代码 version: 1.8 code path: jdk8u/jdk/src/share/classes/java/util/concurrent/atomic 收获 Atomic* 由 Unsafe实现 Unsafe: 声明一些native方 …storm bolt单元测试方法
根据自己做storm bolt单元测试的经验,写了几个常见的例子。 其中主要使用mockito,也试着试用了下backtype.storm.testing测试框架,在我看来storm.testing框架功能很有限,用起来很不爽,可能自己太笨吧! 暂时把代码github放出来,有空 …2014读书单
今年读的几本书 人文 一个人的圣经 影响力 金阁寺 美丽新世界 科技 黑客与画家 The logstash Book Java Quick Syntax Reference Getting Started with Storm 了不起的Node.js …关闭kafka java api的log4j配置提升kafka producer性能
背景 前段时间由于项目需要,基于官方提供的kafka 0.8.1.1版java api开发一个thrift接口的kafka代理层模块,我们暂且就称它为kafka-proxy吧, 主要功能是通过thrift接口接收外部系统的数据,根据规则转发给后端不同的kafka topic。 问 …jetty 9运行在jdk1.6时假死问题
代码 package com.baidu.oped.aqueducts.server.status; import org.eclipse.jetty.server.Server; import org.apache.logging.log4j.LogManager; …源码编译openjdk 8
最近在看«深入理解Java虚拟机-JVM高级特性与最佳实践»这本书,里面有讲解openjdk 7的源码编译方法,比较喜欢尝鲜的我决定编译一下openjdk 8。 阅读了openjdk 8的Build README后发现,编译方式相比openjdk 7来说简 …debian linux安装Intellij IDEA 13
没有用IDE写过代码,一直都是一个铁杆的vim粉丝,可能做的工程还没不够大吧。最近开始搞java,据说最好的java集成开发环境就是这个IDEA了,于是想装来尝试一下集成开发是个什么样的感觉。 Intellij IDEA官方没有提供debian的二进制安装包,于是就问了一下谷哥。 …debian安装Oracle(Sun) jdk 8
在debian linux上玩java的话,常见的jdk有Open-JDK(默认)和Oracle的官方JDK两种选择,debian的官方源中已经没有Oracle(Sun)的官方deb包,所以不能简单的使用apt-get安装了。 现在如果还想使用Oracle官方JDK的话,可以按照 …java String 详解
Java可表达字符串的类主要有java.lang.String, java.lang.StringBuffer和java.lang.StringBuilder三种,下面介绍一下它们三者的异同; java.lang.String 字符串常量,只读,每次赋值操作会destroy掉原有 …日志数据采集客户端logstash和fluentd的比较
logstash和fluentd是ruby圈的log数据采集工具,功能类似于scribed、flume,相比较而言logstash和fluentd架构设计更漂亮,生态圈更丰富一些。 近期先后阅读了fluentd和logstash的源码,大概的一些信息总结如下: 特点: 开发语 …使用dashing写一个kafka监控dashboard
problem kafka是一个以高吞吐著称的分布式消息队列组建,由linkedin于2010年12月开源,目前已经apache的正是项目, 2013年12月发布0.8稳定版, 官方一直没有提供比较好的状态监控解决方案,仅提供了一些JMX的MBean接口,本文将基于这些JMX的 …2013读书单
今年读的几本书 人文 丑陋的中国人 常识 乔布斯传 1988 我想和这个世界谈谈 百年孤独 国史十六讲 像少年啦飞驰 三重门 这些人那些事 悉达多 灵山 第二十二条军规 活着 青春 1984 小强升职记 你的灯亮着吗? 盛世中国2013 父与子 科技 …vagrant入门
vagrant是一个基于virtualbox的虚拟机创建、配置、销毁和管理的工具,可以帮助开发者迅速的搭建开发和测试环境。 下载 建议从官方网站直接下载最新版本。由于我使用的是debian sid amd64的操作系统,所以我的下载方式如下: wget -c …