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

前端性能调优

jvm 
阅读更多

对于前端的性能优化涉及到QPS三要素、优化模版、优化大数据处理、优化JVM参数设置

 

一、QPS三要素

1、多少个线程比较合适?

因为涉及到线程的数量,会导致FULL GC发生

2、响应时间

线程数量=线程执行总时间/瓶颈资源时间*瓶颈资源并行数 在计算对于同一类资源的消耗时间进行合并

QPS=1000/瓶颈资源时间*瓶颈资源并行数

 

什么是瓶颈资源?

前台系统的特点:动态页面渲染输出、页面非常大、数据来自多个远程服务(uc、sc、IC 等)、除了日志几乎没有对磁盘的读写 

影响系统QPS的瓶颈主要是CPU、内存GC hold

 

二、优化模版

优化大数据处理搜索结果解析char to byte,序列化方式选择thrift、protobuffer  注意尽量使的自己模版空格较少 空格要压缩

规模效益:取决于脚本(判断、循环、比较、赋值)占整个模版的比例

减少模版的大小:

1、压缩模版的空白字符

2、重复数据合并  代码里面涉及到循环,并且里面有静态内容输出均可以采用此方法

3、异步渲染数据,不要进行假异步渲染  将页面中静态并且相对不重要的内容抽取出来,利用专门服务器优势CDN化 和cache化

10%-100%的内容的节省 QPS的提升10%-80%

 

三、JVM参数的调整

 

某系统操作系统32位升级到64位,注意的就是原始jvm参数的配置需要将OLD和yong区大小调整一倍,因为root set集合中的指针也扩展字节数,所以指针也占用了一定量的内存

yong区大小至少要大于每次请求内存消耗的100倍,OLD区被挤占的问题

将yong区变大

单次minorgc是否会变长的问题?

因为前台的系统返回的数据一般对象生命周期很短,minor gc会把无用的对象回收掉不会产生赋值的代价,增长的时间只会扫描上产生对象存活时有一点时间的限制,所以对于前台的应用系统适当增加yong区大小是不会产生时间变长。前台系统的数据只有缓存的数据才会存放在OLD区域。

下面是内存区域:

垃圾回收的基本步骤:



 数据进入年老代的三个途径:

1、直接进入OLD区域,超过指定size的数据比较少见,一般一下子申请大片缓冲区

2、minorGC触发时。交换分区S0或者S1放不下

     缓存数据,因为线程执行周期缓慢(线程数量比较多已经由于某些资源线程被阻塞)导致未释放的对象量太多

3、足够老的数据在交换区拷贝次数超过了上限(XX:MaxTenuringThreshold=15)一般情况会这样但有特例

     缓存数据、因为线程执行周期缓慢导致未释放的对象

 

四、平均单次请求内存消耗计算方法

每个请求占用的内存=Eden/(QPS*minorGC的平均间隔时间(秒)),还有一种简单的计算就是JDK1.6.25版本支持一个API函数

  • 大小: 128.4 KB
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics