Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1346534
  • 博文数量: 205
  • 博客积分: 6732
  • 博客等级: 准将
  • 技术积分: 2835
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-04 17:59
文章分类

全部博文(205)

文章存档

2016年(1)

2015年(10)

2014年(1)

2013年(39)

2012年(23)

2011年(27)

2010年(21)

2009年(55)

2008年(28)

我的朋友

分类: Java

2011-07-04 16:53:11

1.分布式JAVA应用

基于TCP/IP+BIO,TCP/IP+NIO,UDP/IP +BIO,UDP/IP+NIO 实现消息方式的系统间的通信方式

基于MINA,JETTY框架

基于远程调用 RMI(spring rmi),WebService(CXF)


2.大型分布式java应用与SOA

基于SCA实现SOA平台

基于ESB实现SOA平台

ESB核心思想是基于消息中间件来实现系统间的交互

基于Tuscany实现SOA平台--SCA

基于Mule实现SOA平台   --ESB


3.深入理解JVM

Java源码编译步骤 1.分析和输入到符号表 2.注解处理  3.语义分析和生成class文件

类加载机制 1.装载(二进制字节码加载至JVM)   2.链接(负责对二进制字节码的格式进行校验,初始化装载类中静态变量及解析类中调用的接口,类)
         3.初始化(执行类中的静态初始化代码,构造器代码及静态属性的初始化)

JDK基于栈的体系结构来执行字节码,基于栈方式是好处为代码紧凑,体积小.

编译时提供两种模式:client compiler 和 server compiler

client compiler 是轻量级,只做少量性能开销比高的优化,它占用内存较少,适用于桌面交互式应用。优化主要有:方法内联,去虚拟化,冗余削除。

server compiler 是重量级,采用了大量的传统编译优化技巧来进行优化,占用内存相对会多一些,适用于服务器的应用。


堆用于存储对象及数组值。

-XMS -XMX 设置一样的大小,防止内存大于变化。

jstat -gcutil [pid] 1000 10 minor GC时的变化情况

jconsole 可以图形查看JVM内存变化状况

JVisualVM 它类似于JPofiler 工具,基于此工具可查看内存的消耗情况,线程的执行状况及程序中消耗CPU,内存的动作。

JMap 分析JVM内存状况的工具 jmap -heap [pid] --查看JVM堆的配置信息

jmap -histo [pid] 查看JVM堆中对象详细占用情况

jHat 是java自带的一个用于分析jvm堆dump文件工具  jhat -J-Xmx1024 [file]

jStat JAVA自带的一个统计分析JVM运行状况的工具

Eclipse Memory Analyzer 分析jvm 堆dump文件的插件

TDA是开源界一个不错的用于分析线程堆栈信息的图形化工具


5。性能调优

调用步骤:衡量系统现状  设定调优目标  寻找性能瓶颈 性能调优   衡量是否达到目标  性能调优

通常性能瓶颈在表象是资源消耗过多,外部处理系统性能不足,或得资源消耗不多

资源主要消耗在CPU,文件IO,网络IO以级内存方法,机器的资源是有限的。当某些资源消耗过多时,通常会造成系统的响应速度慢。

分析CPU  上下文切换, 运行队列 ,利用率
top 或 pidstat 方式来查看进程中线程的CPU的消耗状况
us 过高时,表示运行的应用消耗了大部分的CPU,sy值高时,表示Linux 花费了更多时间在进行线程的切换。

pidstat -d -t -p [pid] 1 100 查看线程IO消耗情况
iostat查看各个设备的IO历史状况

Linux 中可采用sar 来分析网络IO 的消耗状况

vmstat 查看内存信息


JVM调优
1.避免新生代大小设置过小 -当新生代大小设置过小时,会产生两种比较明显的现象,一是minor GC次数更加频繁,二是有可能导致minor gc对象直接进入旧生代。
2.避免新生代设置过大
3.避免Survivor区过小或过大
4.合理设置新生代存活周期


程序调优
1.us过高 增加 Thread.sleep
2.sy 过高 基于kilim 采用Coroution方式支撑高并发

最耗CPU的线程26697为例,将26697换算成十六进制的值,结合java thread dump (jstack [pid] | grmp 'nid = 0x6849') 找到些线程

文件IO消耗严重解决方法
1.异步写文件  log4j AsyncAppender
2.批量写文件
3.限流
4.限文件大小

网络IO消耗严重的解决方法
1.释放不必要的引用
2.使用对象缓存池
3.采用合理的缓存失效算法
4.合理使用SoftReference 和 WearReference


销竞争激烈
1.使用并发包中的类
2.使用Treiber 算法
3.使用michael-scott非阻塞队列算法
4.尽可能少用锁
5.拆分锁
6.去除读写操作的互斥锁


6。构建高可用的系统

负载均均衡技术
选择实际业务处理机器方式 1.随机选择  2.Hash选择  3.(Round-Robin)选择   4.按权重选择  5.按负载选择  6.按连接选择
响应返回方式  1.响应通过负载均衡机器返回(NAT)   2.响应直接返回请求发起方(IP Tunneling 或  DR)
硬件负载设备  F5 各 Netscalar
软件负载  LVS
去中心实现负载均衡   Gossip(Cassandra 采用)

基于Paxos保存一致性

Fackbook Scribe 日志分析系统

书推荐 web容量规划的艺术

7.构建可伸缩的系统

分布式文件系统  HDFS GFS

DAL(数据库访问层)--- amoeba

支撑大数据量  读写分离    多master

阅读(5894) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~