`
pan_java
  • 浏览: 285560 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java分布式学习笔记

    博客分类:
  • java
阅读更多
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分布式学习笔记01分布式Java应用”,这显然是关于Java在分布式环境下的应用和技术的学习资料。虽然提供的部分内容由于格式问题难以直接解析,但我们可以根据标题、...

    Java分布式应用学习笔记

    Java分布式应用学习笔记 在Java世界中,分布式应用是指由多个独立组件通过网络通信协同工作的系统。这种架构模式常用于构建大规模、高可用性、可扩展的系统。本笔记将深入探讨Java分布式应用的核心概念、技术和实践...

    Java分布式应用学习笔记01分布式Java应用和SOA

    ### Java分布式应用与SOA概览 在深入探讨Java分布式应用和面向服务架构(SOA)之前,我们首先需要理解这两个概念的基本含义及其在现代IT系统中的重要性。 #### Java分布式应用 Java分布式应用是指利用Java编程...

    对于\"Java分布式应用学习笔记\"的整理

    分布式系统和SOA的介绍与应用 前言 随着系统规模的扩大,分布式架构的应用变得越来越广泛。...在Java领域,分布式应用的学习和实践是一个非常重要的方向,这对于理解和掌握现代企业级应用架构具有重要意义。

    [实战]Java分布式高级架构师课程学习笔记.docx

    【Java分布式高级架构师课程学习笔记】 在Java分布式高级架构师的学习过程中,涵盖了多个关键领域的技术,包括数据库的高可用方案、缓存系统、消息中间件以及分布式协调服务。以下是对这些主题的深入探讨: 1. **...

    Java分布式应用学习笔记07线程池应用

    ### Java分布式应用学习笔记07线程池应用 在深入探讨Java分布式应用中线程池的应用之前,我们先来理解一下线程池的基本概念及其在并发编程中的重要性。线程池是Java并发编程的核心技术之一,它通过复用一组预创建的...

    Java分布式应用学习笔记-谈JVM.doc

    【Java分布式应用学习笔记-谈JVM】 在Java分布式应用中,JVM(Java虚拟机)扮演着至关重要的角色。虽然有些人可能认为分布式系统与JVM的关系并不密切,但事实上,尤其是在大型分布式环境,如云计算服务平台,对Java...

    Java分布式应用学习笔记09JMX-MBean的介绍

    ### Java分布式应用学习笔记09JMX-MBean的介绍 #### MBean概念及作用 MBean,即Managed Bean,是在JMX(Java Management Extensions)框架中用于管理资源的一种特殊Java对象。通过MBean,可以方便地对应用程序进行...

    java分布式应用学习笔记05多线程下的并发同步器.pdf

    在Java分布式应用开发中,多线程环境下的并发同步是至关重要的一个环节。并发同步器在多线程编程中起到协调各个线程访问共享资源,确保数据一致性与程序正确性的关键作用。本篇笔记将深入探讨Java中的并发同步机制,...

    Java分布式应用学习笔记06浅谈并发加锁机制分析

    ### Java分布式应用学习笔记06浅谈并发加锁机制分析 #### 1. 前言 在深入探讨Java中的并发加锁机制之前,我们有必要回顾一下多线程环境下的一些基本概念和技术。之前的多线程调度、并发调度以及线程加锁安全等内容...

    Java分布式应用学习笔记05多线程下的并发同步器

    ### Java分布式应用学习笔记05多线程下的并发同步器 #### 1. 前言 在现代软件开发中,特别是在分布式系统和高性能计算领域,有效地管理多线程之间的协同工作至关重要。Java语言提供了丰富的工具和API来帮助开发者...

    (完整版)最全的java学习笔记(必看).pdf

    Java学习笔记 Java是一种流行的编程语言,广泛应用于Android应用程序开发、Web应用程序开发、桌面应用程序开发等领域。以下是Java学习笔记的摘要信息: 一、Java技术基础 * 1.1 编程语言:Java是一种面向对象的...

    Java分布式应用学习笔记03JVM对线程的资源同步和交互机制

    ### Java分布式应用学习笔记03:JVM对线程的资源同步和交互机制 在深入探讨Java虚拟机(JVM)如何处理线程间的资源同步与交互机制之前,我们先来明确几个关键概念:线程、多线程、同步、并发以及它们在Java中的实现...

    Java分布式应用学习笔记08JMX规范与各种监控场景.pdf

    Java Management Extensions (JMX) 是Java平台上的一个标准,它定义了一种管理和监控Java应用程序的...无论是简单的本地程序还是复杂的分布式系统,JMX都是一个强大的工具,帮助我们更好地理解和控制我们的Java应用。

    分布式技术相关知识学习笔记

    【分布式技术相关知识学习笔记】 分布式技术是现代软件开发中的重要组成部分,它涉及多种技术手段,如CORBA、ORB、RPC、RMI以及中间件等,旨在解决大型系统中复杂度、扩展性和高可用性的问题。本笔记将重点讨论EJB...

    Java分布式应用学习笔记09JMX-MBean的介绍.doc

    java

Global site tag (gtag.js) - Google Analytics