tty
· ☕ 3 分钟
Jobs


-
SIGHUP- 默认动作:Terminate
- 可能动作:Terminate, Ignore, Function call
当检测到 hangup 时,UART 驱动会向整个 session 发送 SIGHUP 信号。 正常情况下,这会 kill 掉所有进程。某些程序,例如
nohup(1)和screen(1),会从他们的 session(和 TTY)中 detach 出来, 因此这些程序的子进程无法关注到 hangup 事件。


SIGHUP
当检测到 hangup 时,UART 驱动会向整个 session 发送 SIGHUP 信号。 正常情况下,这会 kill 掉所有进程。某些程序,例如 nohup(1) 和 screen(1),会从他们的 session(和 TTY)中 detach 出来, 因此这些程序的子进程无法关注到 hangup 事件。

Class loaders load classes and resources present on their respective classpath:
We can customize the default class loading behavior as well. We can explicitly specify the class loader while loading a class dynamically.
However, we should note that if we load the same class from different types of class loaders, these will be seen as different resources by the JVM.
Format is "java -Dotel.instrumentation.methods.include=my.package.MyClass1[method1,method2];my.package.MyClass2[method3]"
[arthas@16908]$ classloader -t
+-BootstrapClassLoader
+-io.opentelemetry.javaagent.bootstrap.AgentClassLoader@379619aa
+-sun.misc.Launcher$ExtClassLoader@41fa769c
+-com.taobao.arthas.agent.ArthasClassloader@3697b340
+-sun.misc.Launcher$AppClassLoader@18b4aac2
+-java.net.URLClassLoader@71b2d611
+-java.net.URLClassLoader@69cd1085
| +-WebAppClassLoader=266661735@fe4ef67
| | +-com.mycom.sig.foundation.servicediscovery.ExtendedClassLoader@573f7aae
| +-WebAppClassLoader=Server Initiated@1ccb04b3
| | +-com.mycom.sig.foundation.servicediscovery.ExtendedClassLoader@4b3b9a06
| | +-jnr.ffi.provider.jffi.AsmClassLoader@73cb9ccb
| | +-jnr.ffi.provider.jffi.AsmClassLoader@7c380e94
| | +-jnr.ffi.provider.jffi.AsmClassLoader@69ec5d1f
| +-WebAppClassLoader=OAuth Server@10d98940
| | +-com.mycom.ece.common.svcfinder.ExtendedClassLoader@3528968e
| | +-com.mycom.sig.foundation.servicediscovery.ExtendedClassLoader@2919aff3
| | +-jnr.ffi.provider.jffi.AsmClassLoader@1b0e6bac
| | +-jnr.ffi.provider.jffi.AsmClassLoader@2f12d8d1
| | +-jnr.ffi.provider.jffi.AsmClassLoader@73123f21
| +-WebAppClassLoader=1133988396@43974a2c
| +-com.mycom.sig.foundation.servicediscovery.ExtendedClassLoader@39d87c5f
+-java.net.URLClassLoader@1b4c457c
+-java.net.URLClassLoader@3a477cf5
Affect(row-cnt:24) cost in 31 ms.
[arthas@16908]$ classloader
name numberOfInstances loadedCountTotal
org.eclipse.jetty.webapp.WebAppClassLoader 4 24687
BootstrapClassLoader 1 4341
io.opentelemetry.javaagent.bootstrap.AgentClassLoader 1 3502
com.taobao.arthas.agent.ArthasClassloader 1 1430
java.net.URLClassLoader 4 1252
sun.misc.Launcher$AppClassLoader 1 570
sun.reflect.DelegatingClassLoader 378 378
sun.misc.Launcher$ExtClassLoader 1 56
jnr.ffi.provider.jffi.AsmClassLoader 6 8
com.mycom.sig.foundation.servicediscovery.ExtendedClassLoader 4 6
com.mycom.ece.common.svcfinder.ExtendedClassLoader 1 1
|
|
[arthas@16908]$ sc io.opentelemetry.javaagent.instrumentation.methods.MethodInstrumentationModule
io.opentelemetry.javaagent.instrumentation.methods.MethodInstrumentationModule
Affect(row-cnt:1) cost in 54 ms.
[arthas@16908]$ sc -d io.opentelemetry.javaagent.instrumentation.methods.MethodInstrumentationModule
class-info io.opentelemetry.javaagent.instrumentation.methods.MethodInstrumentationModule
code-source /
name io.opentelemetry.javaagent.instrumentation.methods.MethodInstrumentationModule
isInterface false
isAnnotation false
isEnum false
isAnonymousClass false
isArray false
isLocalClass false
isMemberClass false
isPrimitive false
isSynthetic false
simple-name MethodInstrumentationModule
modifier public
annotation
interfaces
super-class +-io.opentelemetry.javaagent.tooling.InstrumentationModule
+-java.lang.Object
class-loader +-io.opentelemetry.javaagent.bootstrap.AgentClassLoader@379619aa
classLoaderHash 379619aa
[arthas@16908]$ sc -d io.opentelemetry.javaagent.instrumentation.methods.MethodTracer
class-info io.opentelemetry.javaagent.instrumentation.methods.MethodTracer
code-source
name io.opentelemetry.javaagent.instrumentation.methods.MethodTracer
isInterface false
isAnnotation false
isEnum false
isAnonymousClass false
isArray false
isLocalClass false
isMemberClass false
isPrimitive false
isSynthetic false
simple-name MethodTracer
modifier public
annotation
interfaces
super-class +-io.opentelemetry.javaagent.shaded.instrumentation.api.tracer.BaseTracer
+-java.lang.Object
class-loader +-WebAppClassLoader=Server Initiated@1ccb04b3
+-java.net.URLClassLoader@69cd1085
+-sun.misc.Launcher$AppClassLoader@18b4aac2
+-sun.misc.Launcher$ExtClassLoader@41fa769c
classLoaderHash 1ccb04b3
class-info io.opentelemetry.javaagent.instrumentation.methods.MethodTracer
code-source
name io.opentelemetry.javaagent.instrumentation.methods.MethodTracer
isInterface false
isAnnotation false
isEnum false
isAnonymousClass false
isArray false
isLocalClass false
isMemberClass false
isPrimitive false
isSynthetic false
simple-name MethodTracer
modifier public
annotation
interfaces
super-class +-io.opentelemetry.javaagent.shaded.instrumentation.api.tracer.BaseTracer
+-java.lang.Object
class-loader +-WebAppClassLoader=OAuth Server@10d98940
+-java.net.URLClassLoader@69cd1085
+-sun.misc.Launcher$AppClassLoader@18b4aac2
+-sun.misc.Launcher$ExtClassLoader@41fa769c
classLoaderHash 10d98940
io.opentelemetry.instrumentation.api.config.Config
->
sc -d io.opentelemetry.javaagent.shaded.instrumentation.api.config.Config
[arthas@16908]$ sc -d io.opentelemetry.javaagent.shaded.instrumentation.api.config.Config
class-info io.opentelemetry.javaagent.shaded.instrumentation.api.config.Config
code-source
name io.opentelemetry.javaagent.shaded.instrumentation.api.config.Config
isInterface false
isAnnotation false
isEnum false
isAnonymousClass false
isArray false
isLocalClass false
isMemberClass false
isPrimitive false
isSynthetic false
simple-name Config
modifier abstract,public
annotation
interfaces
super-class +-java.lang.Object
class-loader
classLoaderHash null
请求是这样分发到 api 扩展点的:

例如我们有 (Custom Resource)CR
|
|
相应的 CustomResourceDefinition (CRD) 会是这样:

Client Sets
Client Sets可以 watch 变更,但一般我们用更高级的 Informers,因为它有缓存、索引等功能。

Informer 有两个功能
you can also create a chart with dependencies to other charts (a.k.a. umbrella chart) which are completely external using the requirements.yaml file.



https://codefresh.io/docs/docs/new-helm/helm-best-practices/
最近由于工作需要,重新系统回顾 Kubernetes 的编程。发现《Programming Kubernetes》这书写得比较系统。于是边学,边记录一些重点。

本文状态:草稿

|
|
desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
currentMetricValue 为相关 pod 的 metric 平均数。

共享内存,多进程/线程的运行期设计模式已成主流的今天,你有好奇一下,进程/线程间的怎么同步的吗?大部分人知道,我们用的开发语言,或类库函数库,已经提供了看起来很漂亮的封装。然而在漂亮的面子工程后面,大部分归根到底是要内核 或/和 CPU 硬件去完成这些同步的。而反过来,只要我们理解了内部原理,你就可以快速理解那些漂亮的面子工程,和他们可能的性能问题,进而选择一个适合你的“面子工程”。而这些内部原理,就是同步原语。
VirtualService:
|
|
DestinationRule :
|
|
使用 sourceLabels 规则,可以根据源 pod 的 label 进行路由。这里用了 version 这个 label。即根据pod的应用版本进行路由。
这样的路由规则实际是使用于发起调用方的 sidecar。

程序员有两个世界:
It is a capital mistake to theorize before one has data. Insensibly one begins to twist facts to suit theories, instead of theories to suit facts.
|
|
|
|
然后在另外一个终端中
|
|
可以看到在 bpftrace 终端中输出: