有了第4层负载均衡为什么还要做第7层的负载均衡?
有了第4层负载均衡(比如lvs),为什么还要做第7层的(比如nginx, squid)? 第4层负载确实已经能做到比较全面了,但不方便做app-specific的均衡策略。 比如“凡是URL以detail.*开头的请求都导到A1-A10结点”,用lvs等就不方便做。然而,用nginx等就比较好实现。 也就是说 第7层负载可以实现更加灵活的、与应用层信息相关的均衡策略。
有了第4层负载均衡(比如lvs),为什么还要做第7层的(比如nginx, squid)? 第4层负载确实已经能做到比较全面了,但不方便做app-specific的均衡策略。 比如“凡是URL以detail.*开头的请求都导到A1-A10结点”,用lvs等就不方便做。然而,用nginx等就比较好实现。 也就是说 第7层负载可以实现更加灵活的、与应用层信息相关的均衡策略。
以下内容来自林昊的《分布式JAVA应用》 us高代表用户态程序占CPU的比例较高 sy高代表内核态程序占CPU的比例较高 对java应用来说, us高一般是因为 1. 有些线程一直处于可运行状态,比如使劲循环 2. CPU密集型操作太多,比如正则运算 3. 频繁GC sy高一般是因为线程上下文切换过于频繁。而切换过多,一般是由于过多阻塞导致的,包括锁等待、I/O阻塞等,一个线程的阻塞会导致CPU让另一个线程上位,即上下文切换。 p.s. sy高跟系统调用过多也会有关系
转自维基百科: http://en.wikipedia.org/wiki/Hash_function In general, a hashing function may map several different keys to the same index. Therefore, each slot of a hash table is associated with (implicitly or explicitly) a set of records, rather than a single record. For this reason, each slot of a hash table is often called a bucket, and hash values …
Non-Blocking I/O已经可以做到不阻塞、不会导致线程发呆了,为什么还要Readiness Selection? 是因为Non-Blocking I/O仍需要轮询吗?虽然Readiness Selection号称属于系统通知机制,但我们在写代码时还是得通过select()来查看有没有通知,本质上其实还是轮询。 那Readiness Selection倒底有没有好处? 我试着回答一下: 1. 轮询的对象不一样,代价也不一样。 Non-Blocking I/O下,线程需要逐个查看各个Channel;而在Readiness Selection时,线程只需要查看单个selector下有没有事件发生。前一种轮询可能会导致多个system call, 而后一种不会。在后一种情况下,OS高效地帮你做了很多事情,直接利用OS提供的功能,总体代价要小得多。 2. Non-Blocking I/O时,发现有数据后必须马上读数据,而Readiness Selection中,可以选择先放一下. 有时候你的应用的性能可能取决于你有没有“先放一下”的自由,比如说,当前CPU Load太高了,可以先不分配线程来读数据,等系统较空闲时再去处理。
BTrace源码的查探点一般是类级别的,指定类名后,这个设置将对此类的所有对象都生效。 但有时我们只想监控这个类里的某个对象,比如某个业务类中的某个HashSet类型的成员变量。 BTrace对此没有直接的支持,但有的情况下你可以考虑一种变通的方法: 1. 先写一个BTrace源码找到你要访问的特定对象的hashCode. int hashCode = BTraceUtils.identityHashCode(set) 2. 然后另写BTrace源码,按hashCode过滤对象: @OnMethod(clazz="java.util.HashSet", method="/.*/") public static void allListMethodsEntry(@Self java.util.HashSet set) throws Exception { if(identityHashCode(set) == hashCode ) { … } } 不得不承认,这种办法的适用场景非常有限: 你的目标应该是一个长寿对象(比如系统中的单例),这个对象的hashCode一直不变。
要这样: sudo -u admin_b some_proc 典型的使用场景:某个服务进程是admin_b启起来的,admin_a作为运维人员要查探一下这个进程的内部细节,直接以admin_a身份来查探可能会被系统拒绝,这时就要用sudo -u了。
access$000() (或access$100等) 方法代表外部类直接访问内部类的私有变量,或者内部类直接访问外部类的私有变量。 要找出具体访问哪个了变量,可以用javap看一下字节码,如: 引用 static java.lang.String access$000(my.OuterClass$InnerClass); Code: Stack=1, Locals=1, Args_size=1 0: aload_0 1: getfield #3; //Field someField:Ljava/lang/String; 4: areturn LineNumberTable: line 391: 0