博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分布式系统-性能篇
阅读量:5287 次
发布时间:2019-06-14

本文共 727 字,大约阅读时间需要 2 分钟。

罪一:网络传输方式问题。传统的rpc框架或者是基于rmi等方式的远程服务调用采用的是同步阻塞i/o,当客户端的并发或者网络延时增大之后,同步阻塞i/o会频繁的wait导致i/o线程经常性阻塞,由于线程无法高效的工作,i/o处理能力自然下降。

采用bio通讯模型的服务端,通常是由一个独立的acceptor线程负责监听客户端的连接,接受到客户端的连接之后,为其创建一个心的线程处理请求消息,处理完成之后,返回应答消息给客户端,线程销毁,这就是典型的一个请求一应答模型。该架构最大的问题就是不具备弹性的伸缩能力,当并发访问增加之后,服务线程个数和并发访问数成线性正比,由于线程是java虚拟机非常宝贵的资源,当线程膨胀之后,系统的性能急剧下降。随着并发量的增加,可能会导致句柄溢出,线程堆栈溢出等问题,并最终导致服务器宕机。

 

罪二:序列化问题。java序列化存在一下几个典型的问题:

a)java序列化是其内部一个对象的编码技术,无法跨语言,例如异构系统之间的对接,java序列化的码流需要通过其它的语言反序列化成原始对象,目前很难支持。

b)相比其它的开源的序列化框架,java序列化的码流太大,无论网络传输还是持久化道磁盘,都会导致额外的资源占用。

c)序列化的性能比较的差,资源的占有率高,主要是cpu资源的占用比较高。

 

罪三:线程模型问题。由于采用的是同步阻塞i/o,导致每个tcp的连接都会被占用1个线程,由于线程资源是jvm虚拟机非常宝贵的资源,当i/o读写阻塞导致线程无法被释放时,会导致系统性能急剧下降,严重的甚至会导致虚拟机无法创建心的线程。

转载于:https://www.cnblogs.com/huane/p/5875618.html

你可能感兴趣的文章
LinkedList 和 ArraryList的区别. <java>
查看>>
大数据学习大纲,大数据应该怎么学
查看>>
HTTP协议学习笔记
查看>>
sublime 打开命令窗口监控
查看>>
ubuntu16.04降级内核版本至3.13.0-85
查看>>
Junit中的异常测试
查看>>
九度OJ 1038:Sum of Factorials(阶乘的和) (DP、递归)
查看>>
DRF之分页器组件
查看>>
JS中this的用法
查看>>
高频交易算法研发心得--MACD指标算法及应用
查看>>
python读写文件
查看>>
使用Visual Studio 2013进行单元测试--初级篇
查看>>
花式索引
查看>>
用python正则提取字符串的方法
查看>>
NHibernate系列学习(三)-条件查询Criteria
查看>>
C++11并发——多线程std::mutex (二)
查看>>
vue router
查看>>
第三次实训作业
查看>>
git
查看>>
FastClick 导致聚焦有问题
查看>>