Co2y's Blog

solver


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签
Co2y's Blog

Metaspace记录

发表于 2019-09-21 | 分类于 Java |

Metaspace历史

Metaspace自JDK8加入,用于替代永久代(PermGen)。相应的参数也从-XX:PermSize和-XX:MaxPermSize改为-XX:MetaspaceSize和-XX:MaxMetaspaceSize。

Metaspace本身占用的是native heap,所以通常不会有PermGen OOM的问题。默认Metaspace大小约为~21M,可以通过-XX:MetaspaceSize参数设置初始大小,避免启动时产生full gc。

那么,Metaspace里到底存了哪些东西?

通常来说,Metaspace存了加载的类的元信息、这些类的方法信息(静态与非静态方法)、静态原始变量的值(primitive value)、静态变量的引用信息、JIT信息等。

ClassLoader与Metaspace

Metaspace里存放了加载的类的元信息,那么Metaspace与ClassLoader是什么关系?

首先,我们知道ClassLoader本身的实例是存放在heap中的,同时每一个Metaspace里的类对应heap里的一个class实例。以下这些东西也在heap中:

  • ClassLoader加载的class通常会缓存在堆中
  • ClassLoader引用的class对象(class只引用静态变量)
  • ClassLoader引用的静态变量实例(其它类的实例,例如String)

Metaspace使用率过高

有时我们会发现Metaspace使用率比较高(达到了98%),这时首先要看下Metaspace具体占了多少native内存,以及-XX:MaxMetaspaceSize参数配置了多少。

如果Metaspace实际占用空间不大,或是小于-XX:MaxMetaspaceSize,那么使用率较高问题不大,因为Metaspace会自动扩容。

另外heap dump排查时也有用,因为前面说过,每个Metaspace中的class,在堆中会有一个对应的instance。

Co2y's Blog

滑动窗口协议

发表于 2019-06-20 | 分类于 Algorithm |

最近发现滑动窗口很有意思,记录一下。

阅读全文 »
Co2y's Blog

写于入职三周

发表于 2018-07-27 | 分类于 个人小结 |

转眼已经入职三周,记录下工作后的感受,日子不长,但学到很多东西。

阅读全文 »
Co2y's Blog

paxos-2

发表于 2017-11-07 | 分类于 Paxos |

记录学习Paxos中的一些理解。

阅读全文 »
Co2y's Blog

paxos-1

发表于 2017-11-06 | 分类于 Paxos |

记录学习Paxos中的一些理解。

阅读全文 »
Co2y's Blog

秋招感想

发表于 2017-09-26 | 分类于 个人小结 |

昨天和今天接连面完了腾讯和网易,秋招也差不多结束了。因为北京的一个没投,所以感兴趣的也不多,之后也就试试微软了。

想到什么写什么。。

阅读全文 »
Co2y's Blog

腾讯校招软件开发编程题writeup

发表于 2017-09-13 | 分类于 Algorithm |

这次题出的比实习招聘要好,虽然不怎么会。。笔试后感谢大佬给我讲题,在此记录下这几题,题目应该不对,题意是对的。

阅读全文 »
Co2y's Blog

Hive UDF开发的一些坑

发表于 2017-07-20 | 分类于 Hive |

Hive UDF的开发,实习的第一个任务,以前也写过,记录点东西。

阅读全文 »
Co2y's Blog

HBase应用场景

发表于 2017-06-30 | 分类于 HBase |

HBase特点

  1. HBase的数据文件HFile放在HDFS上,由HDFS提供数据冗余,保证可靠性。

  2. HDFS本身是一个append的文件系统,不适合随机读取和更新删除操作,HBase的一个功能就是利用LSM架构配合compaction提供随机访问和删除修改功能。

  3. HBase只提供唯一的行级索引rowkey,rowkey是按字典序排好的,由一段rowkey组成的region会split分布到集群的各个RegionServer上,每个RegionServer以region为单位管理若干个region,因此具有很好的水平扩展性。rowkey这种按key值范围sharding的方法,可以实现负载均衡,很好的支持大规模集群,且适合范围查询。

  4. HBase的前身是BigTable,支持很大的数据量,这种设计方式可以支持百亿行×百万列×上万个版本。

  5. HBase采用LSM架构,数据写内存记录log即返回,因此put效率很高,delete也是一种特殊的put。当内存满时才flush到磁盘上,继而可能触发compaction等后续操作。一般来说,这种结构的scan效率要比put低,因为scan的时候既需要考虑内存中的memstore,也要考虑HDFS上的各个HFile,当HFile较多时,需要多次磁盘IO导致效率不高。compaction的作用就是通过短时间的IO操作减少后续scan的延迟。

  6. 在CAP理论中,HBase选择了CP。HBase保证了行级OLTP,这点应用在一些线上的实时系统中来保证数据的一致性。

  7. HBase按列族存储,HBase在HDFS上的存储目录结构为 表名/region名/列族名/HFiles。通常HBase支持很多列存储,把这些列合理放到不同的列族中(例如经常一起访问的放在同一个列族)可以极大的提高查询效率。

  8. HBase的表有宽表和高表之分,通常的建议是用高表,主要的好处是宽表太宽不利于找到split的点,且高表把一个维度放到rowkey中更加利于查询。但是宽表也有好处,例如宽表可以保证行级的一致性,在某些情况下宽表更节省空间。

  9. HBase更像是一个存储系统,通常不适合在上面直接做分析。HBase的交互方式除了put,get等API,还可以用HBase提供的coprocessor把一些计算放在服务器端执行。此外就是把HBase和其它系统集成使用,比如Hive、Storm、Spark等。

阅读全文 »
Co2y's Blog

实习小结

发表于 2017-05-20 | 分类于 个人小结 |

好久没写blog了,上来水一篇小结下最近的事。

阅读全文 »
12…5
Co2y

Co2y

think, record, do

50 日志
17 分类
51 标签
GitHub Weibo
© 2019 Co2y
由 Hexo 强力驱动
主题 - NexT.Mist