- 博客(54)
- 收藏
- 关注
原子循环计数器
现实当中很多场景,需要进行轮训服务,比如轮训在10个日志文件当中写日志,在10台机器上轮训的去调用以实现负载均衡,常规的做法,如tomcat的Poller线程轮训选择,就采用Math.abs(pollerRotater.incrementAndGet()) % pollers.length此地需要取原子自增的绝对值模以poller线程数,那是否有更好的实现呢?public class C...
2016-01-22 16:27:09 251
facebook network-connection-class初探
背景 网络质量是移动端开发很关注的指标,典型场景宝贝详情展示,在网速好的时候出宝贝高清大图片,网络不好的时候出小图片,保证用户的体验和流量付出的平衡。 Network Connection Class是一个由Facebook公司出品的Android类库,用于监听App当前网络流量以及将其按照网络质量进行分类,其是如何做到呢?原理 android是基于li...
2016-01-22 16:23:45 487
从字节码视角看java字符串的拼接
搞java的都知道,string直接用+拼接的时候,javac编译会进行优化,因此字符串拼接也推荐使用stringbuffer或者stringbuilder。那到底是怎么优化的呢?简单的代码如下 package test;public class Java { public String test(String s1, String s2) { return s1 ...
2016-01-22 16:21:46 218
原创 更快的AtomicInteger
之前看了java8的longadder实现,最近又看到一篇文章介绍longadder的,http://ifeve.com/atomiclong-and-longadder/其实现思路也是分段,最后需要get的时候进行sum计算。其核心思路就是减少并发,但之前老的Atomic,难道就没有提升的空间了吗?昨晚进行了一次测试 /** * Atomically increm...
2014-04-25 08:48:59 156
原创 JAVA多线程和并发基础面试问答(转)
多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一。在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题。(校对注:非常赞同这个观点)Java多线程面试问题1. 进程和线程之间有什么不同?一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。...
2014-02-11 16:04:05 122
原创 map or switch
最近碰到个场景,还蛮有普遍性的,如简单工厂方法,需要依据入参选择不同的业务逻辑进行对应的处理 马上想到两个方案方案一:采用map存放对应入口的处理方法,然后请求进来后经过get就行,map.get(et);方案二:采用switch语句, switch (et) { case API3: ...
2014-01-06 17:59:21 203
原创 Servlet Request的 getInputStream() getReader() getParameter()
如果你知道了这三者的区别,请忽略最近碰到了servlet对入参获取方式的处理问题,因为二方库处理不当,导致了获取不到入参的情况,之前也知道这三个方法不兼容,现简单介绍下 1、这三个获取入参的方法,是互斥的,也就是使用了其中一个,再使用另外的两,是获取不到数据的(Content-Type为 multipart/form-data除外,此时getParameter只能获取在u...
2014-01-06 17:46:05 201
原创 IO复用与并发编程(转)
对于服务器的并发处理能力,我们需要的是:每一毫秒服务器都能及时处理这一毫秒内收到的数百个不同TCP连接上的报文,与此同时,可能服务器上还有数以十万计的最近几秒没有收发任何报文的相对不活跃连接。同时处理多个并行发生事件的连接,简称为并发;同时处理万计、十万计的连接,则是高并发。服务器的并发编程所追求的就是处理的并发连接数目无限大,同时维持着高效率使用CPU等资源,直至物理资源首先耗尽。 并...
2013-12-05 15:03:52 113
原创 TCP连接的关闭(转)
TCP连接的关闭有两个方法close和shutdown,这篇文章将尽量精简的说明它们分别做了些什么。为方便阅读,我们可以带着以下5个问题来阅读本文:1、当socket被多进程或者多线程共享时,关闭连接时有何区别?2、关连接时,若连接上有来自对端的还未处理的消息,会怎么处理?3、关连接时,若连接上有本进程待发送却未来得及发送出的消息,又会怎么处理?4、so_linger这个功能...
2013-12-05 15:03:11 138
原创 TCP消息的接收(转)
这篇文章将试图说明应用程序如何接收网络上发送过来的TCP消息流,由于篇幅所限,暂时忽略ACK报文的回复和接收窗口的滑动。为了快速掌握本文所要表达的思想,我们可以带着以下问题阅读:1、应用程序调用read、recv等方法时,socket套接字可以设置为阻塞或者非阻塞,这两种方式是如何工作的?2、若socket为默认的阻塞套接字,此时recv方法传入的len参数,是表示必须超时(SO_R...
2013-12-05 15:02:26 871
原创 TCP消息的发送(转)
我们已经建立好的TCP连接,对应着操作系统分配的1个套接字。操作TCP协议发送数据时,面对的是数据流。通常调用诸如send或者write方法来发送数据到另一台主机,那么,调用这样的方法时,在操作系统内核中发生了什么事情呢?我们带着以下3个问题来细细分析:发送方法成功返回时,能保证TCP另一端的主机接收到吗?能保证数据已经发送到网络上了吗?套接字为阻塞或者非阻塞时,发送方法做的事情有何不同? ...
2013-12-05 15:01:33 849
原创 accept建立连接(转)
编写服务器时,许多程序员习惯于使用高层次的组件、中间件(例如OO(面向对象)层层封装过的开源组件),相比于服务器的运行效率而言,他们更关注程序开发的效率,追求更快的完成项目功能点、希望应用代码完全不关心通讯细节。他们更喜欢在OO世界里,去实现某个接口、实现这个组件预定义的各种模式、设置组件参数来达到目的。学习复杂的通讯框架、底层细节,在习惯于使用OO语言的程序员眼里是绝对事倍功半的。以上做法无可...
2013-12-05 15:00:35 340
原创 AQS(同步器) 转
Java.util.concurrent.locks.AbstractQueuedSynchronizer简介提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架。该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础。使用的方法是继承,子类通过继承同步器并需要实现它的方法来管理其状态,管理的方式就是通过类似acquire和rel...
2013-10-22 19:22:22 261
原创 TIME_WAIT和CLOSE_WAIT(转)
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 具体每种状态什么意思,其实无需多说,看看下面这种图就明白了,注意这里提到的服务器应该是业务请求接受处理的一方: 这么多状态不用都记住,只要了解到我上面提到的最常见的三种状态的意义就可以了。一般不到万不得已的情况也不会去查看网络状态,如果服务...
2013-09-06 09:39:49 106
原创 Java(转)
1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面 第一,控制资源的使用,通过线程同步来控制资源的并发访问 第二,控制实例的产生,以达到节约资源的目的 第三,控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信 - 2.尽量避免随意使用静态变量 要知道,当某个对象被定义...
2013-08-26 11:26:19 111
原创 Java对象占用内存大小
new Object()将占用多少bytes的内存空间? 原生类型(primitive type)的内存占用Primitive Type Memory Required(bytes)—————————————————————boolean 1byte 1short ...
2013-08-02 11:44:16 377
原创 java 对象模型(转 32位系统)
在Sun JVM中,(除了数组之外的)对象都有两个机器字(words)的头部。第一个字中包含这个对象的标示哈希码以及其他一些类似锁状态和等标识信息,第二个字中包含一个指向对象的类的引用。另外,任何对象都是8个字节为粒度进行对齐的。这就是对象内存布局的第一个规则:规则1:任何对象都是8个字节为粒度进行对齐的。比如,如果调用new Object(),由于Object类并没有其他没有其他可存储...
2013-08-01 16:08:27 126
原创 cpu转
下图展示了这些术语之间的逻辑关系:一个NUMA node包括一个或者多个Socket,以及与之相连的local memory。一个多核的Socket有多个Core。如果CPU支持HT,OS还会把这个Core看成 2个Logical Processor。为了避免混淆,在下文中统一用socket指代Processor or Socket;为了偷懒,下文中用Processor指代Logical Pr...
2013-07-31 10:37:42 154
原创 CPU性能的指标:
衡量CPU性能的指标:1,用户使用CPU的情况;CPU运行常规用户进程CPU运行niced processCPU运行实时进程2,系统使用CPU情况;用于I/O管理:中断和驱动用于内存管理:页面交换用户进程管理:进程开始和上下文切换3,WIO:用于进程等待磁盘I/O而使CPU处于空闲状态的比率。4,CPU的空闲率,除了上面的WIO以外的空闲时间5,CPU用于上下文交换的比率...
2013-07-10 13:50:26 326
原创 内存查看 转载
一.free1.简介:显示系统空闲和已使用内存量2.使用:free -b/k 默认使用-k选项,以KB为单位显示内存使用情况free -m 以MB为单位显示内存使用情况free -g 以GB为单位显示内存使用情况free -s delay(延时) 每隔多少秒连续显示内存使用情况free -t 显示总量(Swap+Mem)3.数据分析:[root@huanxiangwu ~]# free -mtt...
2013-06-20 17:01:13 139
原创 tomcat7 servlet 3异步请求AsyncContext AsyncListener超时问题
最近在用tomcat来搞servlet异步化请求,当然异步化下异常处理也很重要,servlet3默认带一个监听器,可以监听onComplete,onError,onStartAsync,onTimeout事件,当然onTimeout可以选择在系统server.xml当中Connector 设置asyncTimeout="100"单位是毫秒,如果不设置,默认就是10秒,当然AsyncCont...
2013-06-04 13:44:01 1315
原创 sqoop MySQL导入Hbase
sqoop http://mirror.bit.edu.cn/apache/sqoop/1.4.1-incubating/sqoop-1.4.1-incubating__hadoop-0.20.tar.gz mysql http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.20.tar.gz/...
2012-05-24 15:02:22 188
原创 Hive与HBase
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。 Hive与HBase的整合功能的实现是利用两者本身对外的API接口互相进行通...
2012-05-23 14:22:42 131
原创 hadoop Map/Reduce 初试
安装好了hadoop集群环境,详细见(hadoop安装),当然得要跑一下Map/Reduce package com.hadoop;import java.io.IOException;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.*;import org.apache.hadoop....
2012-04-06 14:04:57 96
原创 hbase安装
hbase依赖于hadoop环境,先得安装好hadoop集群,当然也可以跑单机版的hbase,不过那样就没意义了安装hadoop,参考 hadoop安装 http://sunqi.iteye.com/blog/1432015 参考网上的资料,自己动手实践一下 下载hbasewget http://mirror.bjtu.edu.cn/apache/hbase/hbas...
2012-03-01 15:07:00 139
原创 hadoop安装
最近研究hbase,hbase依赖hadoop,当然需要安装一下,并且写代码调试感觉下记录下安装过程首先准备三台机器,新建好hadoop帐号,host绑定,10.20.156.166 node110.20.156.164 node310.20.156.163 node4node1是主节点,当然要让node1能免密码直接ssh到node3,node4。须要确定...
2012-03-01 14:28:55 84
原创 linux下的定时执行工具Crontab
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务: /sbin/service crond start //启动服务 /sbin/service crond stop //关闭服务 /sbin/service crond restart //重启服务 /sbi...
2011-03-21 13:58:37 142
原创 Sun Hotspot JDK JVM参数设置调优--转载
对于有2块CPU和2GB内存及更佳配置的服务器,Sun的hotspot jdk默认设置了如下参数:-server :服务器模式编译-XX:+UseParallelGC 并行收集-Xms设置为服务器物理内存的1/64-Xmx设置为服务器物理内存的1/4(最大为1G)堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模...
2011-01-28 15:11:00 157
压力测试(性能测试)和性能调优实战---jmeter、jamon、jconsole
现在网站高并发情况下,上个关键功能点都需要进行压力测试,进行性能调优,如何去做呢?来个实战吧 现在压力测试jmeter使用也非常普遍了,对于一些页面测试的,登录cookie等模拟的直接用jmeter就能做到,也可以用badboy录制脚本就能直接使用,但对于hessian接口的压测就比较麻烦,下面以对hessian接口压测为列 jmeter提供了对java等测试的扩展,但需要自己...
2010-11-10 12:37:44 720
原创 nginx upstream的5种配置方式
1、轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。2、weight指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 例如: upstream bakend { server 192.168.0.14 weight=10; server 192.168.0.15 weight=...
2010-08-31 09:45:36 361
原创 apache ab压力测试
格式: ./ab [options] [http://]hostname[:port]/path参数: -n requests Number of requests to perform //在测试会话中所执行的请求个数。默认时,仅执行一个请求 -c concurrency Number of multiple requests to make //一次产生的请求个...
2010-08-18 19:59:00 77
原创 Keepalived + nginx 双备份
配置一: 以前写过一篇,nginx+keepalived 双机互备的文章,写那篇文章的时候没有想过如果apache或者nginx 挂了,而 keepalived 或者 机器没有死,那么主辅是不会切换的,今天就研究了一下该如何监控 nginx进程呢,看官方站看到了。vrrp_script 功能,但是用他的方法实在形不通,可能是我的方法不对,或者是个BUG。所以后来我自己写了个小脚本来完成...
2010-08-12 15:48:28 258
原创 memcache过期时间的一点小小的分析
如果你清楚知道这一点,那就跳过吧!如果你不太清楚原因,那就往下看吧 我们都在用MemCached,缓存有其过期时间,我们经常在配置中设置,如果有业务场景需要动态设置过期时间的时候,就可以通过接口直接设置过期时间 client.set(key, value, new Date(expireTime)); 但这个时间如何设置,还是有一点区别,比如...
2010-08-11 13:05:34 864
原创 linux top
linux top-统计信息区 top:动态观察进程的变化情况ps是某个时间点的进程状态,而top则是动态实时观察进程的运行状态。我们把top命令的结果分成三部分来了解,大致就是下面这个样子的。第一部分是系统整体的统计信息。第一行是任务队列信息(top),同 uptime 命令的执行结果。其内容如下:top – 21:50:37 当前时间up 2:0...
2010-07-29 18:04:51 94
原创 memcached 缓存对象需要修改属性时候的陷阱
类修改后需要重新计算serialVersionUID值 现在我们使用cache的地方有很多了,一般放入cache的value都是经过序列化的对象,万一哪天有个需求,需要修改一下这个对象,增加一个属性,而你忘记更新serialVersionUID,灾难来临了。昨天一不小心我们也踏了这个陷阱了 我们的User 昨天发布增加了hasOpen 属性,这个是被放在了memcache中了的...
2010-07-23 09:02:22 190
原创 mysql sql利用索引
select id,title from user limit 1000,10; 0.02秒select id,title from user limit 88888,10; 8-9秒select id,title from user order by id limit 88888,10; 0.04秒就OK。或者select id,title from ...
2010-07-15 20:14:12 149
原创 Mysql之执行计划 查看索引利用情况 explain
查看表索引 show index from table使用explain select * from table where id=1;下面我们就来看看这个EXPLAIN分析结果的含义:table:这是表的名字。 type:连接操作的类型。下面是MySQL文档关于ref连接类型的说明:“对于每一种与另一个表中记录的组合,MySQL将从当前的表读取所有带有匹配索引值的记录。如...
2010-07-13 09:30:34 273
原创 tomcat7和Servlet3之异步特性体验
今天发现tomcat7发布bate版了,对Servlet3的支持令值得期待,尤其是异步这个特性,之前bate版都没有,只有拉它主干自己编译tomcat跑的。赶紧来尝试下吧~ http://tomcat.apache.org/download-70.cgi 在我们项目中,应用异步最典型场景就是订购后等待开通这个等待过程了,在之前Servlet版本,一个请求必须要完全处理...
2010-07-09 08:44:31 145
原创 java
[img]http://img.s.aliimg.com/pm/js/itbu/pm/jsserver/launcher-v2.js?sid=sunqi800&site=offerdetail&_ts=20120327[/img]
2010-06-11 17:41:26 64
原创 nginx 安装选项
yum -y install pcre-devel openssl openssl-devel./configure --prefix=/home/alisoft/nginx --user=alisoft --group=alisoft --without-http-cache --with-http_stub_status_module--prefix=<path> - Ng...
2010-05-27 13:50:55 190
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人