Linux下关于TCP的keep alive的实现源码分析

TCP下的Keep Alive 我们常说的TCP的keep alive,就是为了保证连接的有效性,在间隔一定的时间发探测包,根据回复来确认该连接是否有效。通常上层应用会自己提供心跳检测机制,而Linux内核本身也提供了从内核态确保连接有效性的方式。 在sock 函数中可以设置是否需要打开keep alive开关,默认建立socket 是关闭keep alive的。代码如下 opt...
阅读(2697) 评论(0)

IPVS(也叫LVS)的源码分析之persistent参数

IPVS 也叫LVS的源码分析之persistent参数...
阅读(5201) 评论(1)

lvs DR模式的笔记

最近在配置lvs,想用lvs做个VIP...
阅读(1697) 评论(0)

linux里的backlog详解

说起backlog, 都会想起socket编程中的listen backlog 参数,而这个backlog 是linux内核中处理的backlog么? int listen(int sockfd, int backlog)man listen  可以看到关于listen 的解释 The backlog argument defines the maximum length to wh...
阅读(15654) 评论(5)

linux上TCP connection timeout的原因查找

最近在产线上经常出现connection timeout的问题...
阅读(16489) 评论(0)

jsvc 启动java 在linux下的实现原理

jsvc 是在apache的daemon项目下开源项目,主要功能可以使一些运行在普通用户下的java进程获取一些root权限下的权利,比如端口在1024下等。 如何运行 在自己的java代码中,实现start, init , stop,destroy的方法,将自己的编译打成jar文件,  通过调用jsvc 来启动 ./jsvc -java-home /usr/java/jdk1.7...
阅读(8994) 评论(0)

java InetAddress.getLocalHost() 在linux里实现

java 中的 InetAddress.getLocalHost()  在Inetaddress.getLocalHost()中最终调用的是Inet6AddressImpl.java(取决于你使用ipv4,还是ipv6) 中getLocalHostName的native代码 最终在native代码中 JNIEXPORT jstring JNICALL Java_java_net_Inet...
阅读(7895) 评论(0)

jvm hotspot 源码分析 RandomAccessfile vs FileChannel 写文件

RandomAccessFile 和 FileChannel 是常用的写文件的方式,而一般都会推荐使用FileChannelImpl ,同事做了个测试,却发现FileChannelImpl写文件的性能比RandomAccessFile差。 调用接口: RandomAccessFile.write(byte[] bytes) FileChannel.write(ByteBuffer src)...
阅读(4508) 评论(3)

jvm crash 的崩溃日志详细分析及注意点

生成 1. 生成error 文件的路径:你可以通过参数设置-XX:ErrorFile=/path/hs_error%p.log, 默认是在java运行的当前目录 [default: ./hs_err_pid%p.log] 2. 参数-XX:OnError  可以在crash退出的时候执行命令,格式是-XX:OnError=“string”,   可以是命令的集合,用分号做分隔符, 可以用"%p...
阅读(20076) 评论(2)

Java 工具(jmap,jstack)在linux上的源码分析(六) -F 参数 如何读取线程列表

在java中,如何通过访问内存拿到线程列表,用于跟踪线程的运行状态,这也是jstack的主要功能。 在jvm里,有没有F的参数实现笔者前面的博客已经说明了。因为-F是通过访问java的内存来取的信息的,所以当使用-F参数的时候,需要知道java运行过程中内存的结构,从而通过访问内存能获取到你所需要的信息。 1. 结构体 VMStructEntry  和 VMTypeEntry typede...
阅读(1917) 评论(0)

java 中关于自定义信号在linux下的实现

在java 中调用Signal的方法handle可以去注册一个信号的处理函数,方法的如下: public static synchronized SignalHandler handle(Signal sig, SignalHandler handler) { .... } 比如常用的addShutdownHook钩子函数里,就是在 Terminator.setup...
阅读(3221) 评论(0)

Java 工具(jmap,jstack)在linux上的源码分析(六) -F 参数 读取动态链接共享库文件中的符号表

通常我们使用jmap,jstack 去检查堆栈信息的时候,是不会使用-f参数的,但有的时候系统在无法打印出堆栈信息的时候,会建议你使用参数-F。 关于-F参数与非-F参数的区别笔者已经在前面的博客中讲述(http://blog.csdn.net/raintungli/article/details/7023092),简单的说也就是一种是让jvm进程自己打印出堆栈信息,另有一种是直接访问jvm的堆...
阅读(2419) 评论(0)

在centos上编译jdk 问题大全

为了解决博客Jstack -F 参数在低版本的问题,必须重新编译自己的jdk,按着java里面自带的build的文档,基本就傻眼了,没想到作为开源之首的java,编译自己的jdk的文档尽然如此陈旧,不得已还是自己摸石子过河吧。 1. 下载源码 ,直接去oracle 的官方网站:http://download.java.net/jdk6/source/ 注意你要下载2个jar JDK 6u...
阅读(2325) 评论(1)

Java 工具(jmap,jstack)在linux上的源码分析(五) -F 参数的bug

当使用jmap,jstack是用-F参数的时候,是通过调用系统调用ptrace来取的寄存器的信息,关于linux下的ptrace实现可以参考我的博客(http://blog.csdn.net/raintungli/article/details/6563867) 在jdk6u23版本之前你会发现,当你使用jstack -F的时候 经常在logger 里面 看到错误信息,直接抛出异常,根本无法看到...
阅读(5387) 评论(1)

java 中关于信号的处理在linux下的实现

linux 的线程和信号 基于 NPTL 的线程库,多线程应用中的每个线程有自己独特的线程 ID,并共享同一个进程ID。应用程序可以通过调用 kill(getpid(),signo) 将信号发送到进程,如果进程中当前正在执行的线程没有阻碍此信号,则会被中断,线号处理函数会在此线程的上下文背景中执行。应用程序也可以通过调用 pthread_kill(pthread_t thread, int si...
阅读(5687) 评论(0)

Java 工具(jmap,jstack)在linux上的源码分析(四)safe point

safe point 顾明思意,就是安全点,当需要jvm做一些操作的时候,需要把当前正在运行的线程进入一个安全点的状态(也可以说停止状态),这样才能做一些安全的操作,比如线程的dump,堆栈的信息。 在jvm里面通常vm_thread(我们一直在谈论的做一些属于vm 份内事情的线程) 和cms_thread(内存回收的线程)做的操作,是需要将其他的线程通过调用SafepointSynchroni...
阅读(3145) 评论(0)

Java 中自旋锁的实现

Java中初始是使用mutex互斥锁,因为互斥锁是会线程等待挂起,而对获取锁后的操作时间比较短暂的应用场景来说,这样的锁会让竞争锁的线程不停的park,unpark 的操作,这样的系统的调用性能是非常糟糕的,为了提高锁的性能,java 在6 默认使用了自旋锁。 在Linux中本身就已经提供了自旋锁的系统调用,在glibc-2.9中就有它的比较简单的实现方法 int pthread_...
阅读(6500) 评论(1)

Java 工具(jmap,jstack)在linux上的源码分析(三)执行的线程vm thread

在前面的博客中(http://blog.csdn.net/raintungli/article/details/7034005)所提到的信号转发线程,Attach Listener 线程都只是操作socket文件,并没有去执行比如stack 分析,或者heap的分析,真正的工作线程其实是vm thread. (一)启动vm thread jint Threads::create_vm(Java...
阅读(5581) 评论(0)

Java 工具(jmap,jstack)在linux上的源码分析(二)信号处理

当java虚拟机启动的时候,会启动很多内部的线程,这些线程主要在thread.cpp里的create_vm方法体里实现 而在thread.cpp里主要起了2个线程来处理信号相关的 JvmtiExport::enter_live_phase(); // Signal Dispatcher needs to be started before VMInit event is posted...
阅读(5347) 评论(0)

Java 工具(jmap,jstack)在linux上的源码分析(一)

在我们常用的Jstack, Jmap 用于分析java虚拟机的状态的工具,通过起另一个虚拟机通过运行sun.tools包下的java文件,去跟踪另一个虚拟机的状态。 如果让你设计一个跟踪另一个进程的方法,你也通常会考虑这几种常用的方式。 第一种,就是通知被跟踪的进程,让进程执行相应的消息,同时对该消息做出反应。 第二种,就是通过内核的调用,直接能够访问进程的内存,堆栈情况,通过分析被...
阅读(4814) 评论(0)
32条 共2页1 2 下一页 尾页
    个人资料
    • 访问:420508次
    • 积分:4908
    • 等级:
    • 排名:第6171名
    • 原创:97篇
    • 转载:3篇
    • 译文:0篇
    • 评论:70条
    最新评论