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
分享到:
相关推荐
从给定的文件信息来看,标题和描述都指向了“Java分布式学习笔记01分布式Java应用”,这显然是关于Java在分布式环境下的应用和技术的学习资料。虽然提供的部分内容由于格式问题难以直接解析,但我们可以根据标题、...
Java分布式应用学习笔记 在Java世界中,分布式应用是指由多个独立组件通过网络通信协同工作的系统。这种架构模式常用于构建大规模、高可用性、可扩展的系统。本笔记将深入探讨Java分布式应用的核心概念、技术和实践...
### Java分布式应用与SOA概览 在深入探讨Java分布式应用和面向服务架构(SOA)之前,我们首先需要理解这两个概念的基本含义及其在现代IT系统中的重要性。 #### Java分布式应用 Java分布式应用是指利用Java编程...
分布式系统和SOA的介绍与应用 前言 随着系统规模的扩大,分布式架构的应用变得越来越广泛。...在Java领域,分布式应用的学习和实践是一个非常重要的方向,这对于理解和掌握现代企业级应用架构具有重要意义。
【Java分布式高级架构师课程学习笔记】 在Java分布式高级架构师的学习过程中,涵盖了多个关键领域的技术,包括数据库的高可用方案、缓存系统、消息中间件以及分布式协调服务。以下是对这些主题的深入探讨: 1. **...
### Java分布式应用学习笔记07线程池应用 在深入探讨Java分布式应用中线程池的应用之前,我们先来理解一下线程池的基本概念及其在并发编程中的重要性。线程池是Java并发编程的核心技术之一,它通过复用一组预创建的...
【Java分布式应用学习笔记-谈JVM】 在Java分布式应用中,JVM(Java虚拟机)扮演着至关重要的角色。虽然有些人可能认为分布式系统与JVM的关系并不密切,但事实上,尤其是在大型分布式环境,如云计算服务平台,对Java...
### Java分布式应用学习笔记09JMX-MBean的介绍 #### MBean概念及作用 MBean,即Managed Bean,是在JMX(Java Management Extensions)框架中用于管理资源的一种特殊Java对象。通过MBean,可以方便地对应用程序进行...
在Java分布式应用开发中,多线程环境下的并发同步是至关重要的一个环节。并发同步器在多线程编程中起到协调各个线程访问共享资源,确保数据一致性与程序正确性的关键作用。本篇笔记将深入探讨Java中的并发同步机制,...
### Java分布式应用学习笔记06浅谈并发加锁机制分析 #### 1. 前言 在深入探讨Java中的并发加锁机制之前,我们有必要回顾一下多线程环境下的一些基本概念和技术。之前的多线程调度、并发调度以及线程加锁安全等内容...
### Java分布式应用学习笔记05多线程下的并发同步器 #### 1. 前言 在现代软件开发中,特别是在分布式系统和高性能计算领域,有效地管理多线程之间的协同工作至关重要。Java语言提供了丰富的工具和API来帮助开发者...
Java学习笔记 Java是一种流行的编程语言,广泛应用于Android应用程序开发、Web应用程序开发、桌面应用程序开发等领域。以下是Java学习笔记的摘要信息: 一、Java技术基础 * 1.1 编程语言:Java是一种面向对象的...
### Java分布式应用学习笔记03:JVM对线程的资源同步和交互机制 在深入探讨Java虚拟机(JVM)如何处理线程间的资源同步与交互机制之前,我们先来明确几个关键概念:线程、多线程、同步、并发以及它们在Java中的实现...
Java Management Extensions (JMX) 是Java平台上的一个标准,它定义了一种管理和监控Java应用程序的...无论是简单的本地程序还是复杂的分布式系统,JMX都是一个强大的工具,帮助我们更好地理解和控制我们的Java应用。
【分布式技术相关知识学习笔记】 分布式技术是现代软件开发中的重要组成部分,它涉及多种技术手段,如CORBA、ORB、RPC、RMI以及中间件等,旨在解决大型系统中复杂度、扩展性和高可用性的问题。本笔记将重点讨论EJB...
java