rosenlo / notes Goto Github PK
View Code? Open in Web Editor NEWVarious computer science topics
Various computer science topics
通过Minikube本地运行Kubernetes。OS X版本的Minikube实际是创建了一个Linux虚拟机,再在虚拟机上支持容器。默认驱动程序为VirtualBox
,这里我使用了Hyperkit。
参考官方教程:https://kubernetes.io/docs/tutorials/hello-minikube/
配置为:http://0.0.0.0:1087
,需要注意以下问题:
127.0.0.1:1087
,由于是在虚拟机内创建的容器,因为虚拟机网段的不同并不能使用127.0.0.1
或localhost
等地址,对于虚拟机来说localhost
为虚拟机本身,并不是宿主机。所以须设置为宿主机与虚拟机网段通讯的IP地址。这里的HTT_PROXY
和HTTPS_PROXY
填宿主机地址192.168.64.1
,这里虚拟机的网段为192.168.64.0/24
minikube start --vm-driver=hyperkit --docker-env HTTP_PROXY=http://192.168.64.1:1087 --docker-env HTTPS_PROXY=http://192.168.64.1:1087
对于已创建过的集群,可以通过配置文件修改~/.minikube/machines/minikube/config.json
"Env": [
"HTTP_PROXY=http://192.168.64.1:1087",
"HTTPS_PROXY=http://192.168.64.1:1087"
],
以上设置完后,虚拟机中的容器也可以愉快的访问外面的世界了!
JVM
对ElasticSearch
集群的稳定性有很大的影响。
Java
是一个垃圾收集语言,意思是这个程序不会手动管理分配和释放内存。程序员只需要编写代码,jvm
管理根据需要管理分配内存的处理,然后在不需要的时候清理。
Young (or Eden)
当新实例一个对象的时候分配的空间,新生代的空间一般比较小,通常是100MB-500MB,新生代也包含了2个幸存(survivor
)空间。
Old
存储较老的对象空间。这些对象预期是长久的并且持续了很长时间。老年代一般比新生代空间大得多,在ElasticSearch
节点中最大可以设置为30GB。
当一个对象被实例化,它将被放到新生代。当新生代空间快满的时候,开始新生代垃圾收集(GC
),仍然”活着“的对象移到survivor
空间,不再用的对象被移除,如果一个对象在几次新生代GC
中survived
下来,它将被永远被放在老年代。
类似的情况发生在老年代,当空间快满时,开始GC
移除不再用的对象。
对于空间比较小的新生代GC
执行很快,但对于老年代来说就比较慢了,一个缓慢的GC
可能有1s甚至15s以上,这对于服务是不可接受的。
JVM中的GC
是非常复杂的算法,可以最小化停顿。ElasticSearch非常努力的试图使GC
变得友好,通过智能重用内部对象、网络缓存区并默认启用文档值,但最终,GC
的次数和持续的时间是需要观察的指标,因为它是集群不稳定性的第一个罪归祸首。
一个频繁长时间GC
的集群是重负载并且没有足够的内存的。这些长时间GC
将使节点短暂的离开集群。在elasticsearch中为了保持集群的稳定和可用的副本,这种不稳定因素经常导致重新迁移分片。当你的集群尝试服务正常的索引和查询时,这反过来增加了网络流量和磁盘I/O
负载。
简而言之,长时间GC
是危险的,需要尽可能的减少它的时间。
node-stats API
:
"jvm": {
"timestamp": 1483246917484,
"uptime_in_millis": 679408297,
"mem": {
"heap_used_in_bytes": 17235461384,
"heap_used_percent": 55,
"heap_committed_in_bytes": 30780620800,
"heap_max_in_bytes": 30780620800,
"non_heap_used_in_bytes": 137928872,
"non_heap_committed_in_bytes": 141455360,
}
}
heap_committed_in_bytes
应该和heap_max_in_bytes
相同,如果这个committed
大小更小,JVM
将会重新调整堆栈,这是个非常昂贵的过程。如果你的数字不一样,参考Heap: Sizing and Swapping如何正确配置。heap_used_percent
这个指标是非常有用的,当heap
达到75%时启动GC
。如果节点一直大于75%,节点内存将有压力,这是一个警告信号,表示缓慢的GC
将会在不久发生。heap
使用一直大于85%,你将有麻烦来了,超过90-95%伴随着GC
时间达到10-30s将面临性能风险,并有可能引发一个异常out-of-memory(OOM)
"pools": {
"young": {
"used_in_bytes": 3525862600,
"max_in_bytes": 5726666752,
"peak_used_in_bytes": 5726666752,
"peak_max_in_bytes": 5726666752
},
"survivor": {
"used_in_bytes": 77053512,
"max_in_bytes": 1431633920,
"peak_used_in_bytes": 618333600,
"peak_max_in_bytes": 1431633920
},
"old": {
"used_in_bytes": 13631010160,
"max_in_bytes": 23622320128,
"peak_used_in_bytes": 17722183576,
"peak_max_in_bytes": 23622320128
}
}
young
、survivor
和old
部分提供在GC
中每个代的内存使用情况。这些统计数据方便你查看相对大小,但在调试问题时通常不太重要。"gc": {
"collectors": {
"young": {
"collection_count": 35879,
"collection_time_in_millis": 1954077
},
"old": {
"collection_count": 6,
"collection_time_in_millis": 4782
}
}
}
gc
部分展示了young
和old
垃圾收集的数量和累积的时间。大部分可以安全的忽略young
的数量。数量是非常大的,这是完全正常的。old
垃圾收集数量应该是非常少的,同时collection_time_in_millis
也会比较小。这是个累计数,所以很难给出一个具体的数字代表它出现了问题。(例如:一个运行了一年的节点将具有非常大的计数,即使它是正常的)。GC
上的时间也非常重要。(例如:在索引一个文档时将生成一些垃圾)。这些GC
几乎总是快速并且对节点几乎没有影响。young
需要1ms或2ms,而old
需要几百毫秒,这和需要10s的GC
截然不同。slow-GC
日志ElasticSearch在内部管理线程池,这些线程池合作完成任务,根据需要在彼此传递工作。通常不需要配置或调整线程池,但是有时候查看这些统计信息是非常有益的,可以了解集群的状态。
有大约十二个线程池,但都是一样的格式:
"bulk": {
"threads": 0,
"queue": 0,
"active": 0,
"rejected": 0,
"largest": 0,
"completed": 0
}
threads
),有多少个活动的线程正在工作(active
),有多少个工作单位在一个队列(queue
)。rejected
),这通常是一个信号,表示集群上资源到了一定瓶颈。一旦队列满了意味着节点/集群正在以最大的速度处理但跟不上涌入的请求。indexing
bulk
get
search
merging
lucene
合并A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.