- 博客(254)
- 收藏
- 关注
原创 Java堆外内存泄露分析
查看堆内存占用正常,jvm垃圾回收也没有异常。而top出来显示java占用内存是几个G,那么可能想到了是堆外内存泄漏。需要安装google-perftools工具进行分析1.先安装g++不然编译会报错:g++: command not found# yum -y install gcc gcc-c++----2.安装libunwind不建议版本>0.99据说有问题,
2018-01-25 14:18:29 15544 2
原创 Java飞行记录器 JRockit Flight Recorder JFR诊断JVM的历史性能和操作
需要展开子树,复制堆栈跟踪,就可以查看到代码调用链,看到自己的业务代码,从而定位到最耗时的代码位置:
2016-10-13 10:47:42 4225
原创 Spring源码分析【8】-MyBatis注解方法不能重载
代码如下:这是不可以的,会报错:2016-08-18 11:36:00,267 [main] ERROR [org.mybatis.spring.mapper.MapperFactoryBean] - Error while adding the mapper 'interface com.unix21.mapper.UserMapper' to configuration.
2016-08-18 11:48:46 10512 5
原创 Spring源码分析【4】-Spring扫描basePackages注解
代码@Configuration@Import(MybatisConfig.class)@ComponentScan(basePackages = {"com.xxx.*"}, excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class)})
2016-08-09 16:28:37 16268 1
原创 Spring4实战学习笔记
《Spring4实战 第4版》2016年4月新出版的,之前的第三版看起来还是不错的,所以看到新版就直接买下来。1.装配Bean参考【2.2】1.1接口只有一个现实类可以自动装配public interface CompactDisc { void play();}import org.springframework.stereotype.Co
2016-05-04 19:14:16 7558 1
原创 调试JDK源码-一步一步看HashMap怎么Hash和扩容
还是调试源码最好。开发环境 JDK1.8+NetBeans8.1说明:调试HashMap的 public V put(K key, V value) 方法并查看key的值时不能显示变量的值,原因在于oracle提供的jre中rt.jar不带debug信息。orcale在编译src时使用了 javac -g:none,意思是不带任何调试信息,这样可以减小rt.jar的大小。若想正常调试
2016-03-17 10:54:15 9292 5
原创 NetBeans配置Xdebug 远程调试PHP
很多PHP程序员使用echo,dump等比较原始的方法调试,这是非常落后的。几年前本人写过一篇:NetBeans配置Xdebug由于那篇文档还需要引用本人写的其他文档,感觉有些分散,所以这里重新写一篇完整的。linux版本:64位CentOS 6.4Nginx版本:nginx1.8.0php版本:php5.5.28xdebug版本:2.5.5NetBeans...
2015-08-18 18:02:37 1241
原创 计算机科学精彩帖子收集
linux源码LXR 源自“the Linux Cross Referencer”,中间的“X”形象地代表了“Cross”。与 Source Navigator 类似,它也是分析阅读源代码的好工具。不同的是,它将源代码借助浏览器展示出来,文件间的跳转过程成了我熟悉的点击超链接动作。http://lxr.linux.no/ LXR安装过程简介linux手册http://linux
2014-04-24 15:39:15 11194 5
原创 ZooKeeper集群环境安装与配置
ZooKeeper版本:3.4.5约定:3台虚拟机前提:需要安装JDK,关于Linux环境JDK安装配置参考我的另一帖Linux环境安装卸载JDK以及安装Tomcat和发布Java的web程序ZooKeeper官网:http://zookeeper.apache.org/1.下载解压# wget http://mirrors.hust.edu.cn/apache/z
2014-02-08 17:51:46 5054
原创 Linux环境HBase安装与使用
Linux环境:CentOS6.5HBase版本:hbase-0.94.161.下载解压安装文件# wget http://mirror.bit.edu.cn/apache/hbase/stable/hbase-0.94.16.tar.gz# tar xvfz hbase-0.94.16.tar.gz2.启动HBase# /usr/hbase-0.94.
2014-01-25 21:49:53 9435 1
原创 Redis安装与源码调试
官网下载:http://redis.io/download1.安装Redis# wget http://redis.googlecode.com/files/redis-2.6.14.tar.gz# tar xzf redis-2.6.14.tar.gz# cd redis-2.6.14# makemake命令执行完成后,会在src目录下生成5个可执行文件,分别是redis
2013-07-27 09:12:35 11374 4
原创 valgrind Massif
nginx源码学习是一个痛苦又快乐的过程,下面列出了一些nginx的学习资源。 首先要做的当然是下载一份nginx源码,可以从nginx官方网站下载一份最新的。看了nginx源码,发现这是一份完全没有注释,完全没有配置文档的代码。 现在你最希望要的是一份注释版的nginx源码,可以从下面的链接中下载一份:https://github.com/jianfengye/nginx
2013-07-15 12:01:00 10005 2
原创 使用valgrind分析C程序调用线路图
Valgrind可以检测内存泄漏和内存违例,但是用Valgrind生成的日志信息结合kcachegrind就可以查看C程序的执行线路图,调用时间,是做性能优化和查看代码的非常好的工具。下载安装Valgrind 安装到www.valgrind.org下载最新版valgrind# wget http://www.valgrind.org/downloads/valgri
2013-04-08 14:01:23 5908
原创 Linux环境Nginx安装与调试以及PHP安装
linux版本:64位CentOS 6.8Nginx版本:nginx1.17.7php版本:php5.6.40说明:本博不定时更新为新版本1.编译安装Nginx官网:http://wiki.nginx.org/Install下载:http://nginx.org/en/download.html安装GCC安装nginx需要gcc,如果因为需要安装grpc...
2013-01-26 17:22:43 16306
原创 从寄存器看I386和x64位中函数调用中参数传递
x86_64基本使用寄存器存储函数参数,寄存器不够才入栈;而i386将所有参数保存在栈上,通过gcc的扩展功能__attribute__((regparm()))即可实现部分参数的寄存器传递。代码#include #include int v1 = 1;float v2 = 0.01;#ifdef FAST__attribute__((regparm(3))
2012-12-29 13:03:32 8899
原创 GDB查看栈信息
栈:是程序存放数据内存区域之一,特点是LIFO(后进先出)。PUSH:入栈POP:出战使用场景:1.保存动态分配的自动变量使用栈2.函数调用时,用栈传递函数参数,半寸返回地址,返回值代码sum.c#include #include #include #define MAX (1UL << 20)
2012-12-29 12:53:44 27329 2
原创 汇编语言系统调用过程
以printf为例,详细解析一个简单的printf调用里头,系统究竟做了什么,各寄存器究竟如何变化。如何在汇编调用glibc的函数?其实也很简单,根据c convention call的规则,参数反向压栈,call,然后结果保存在eax里头。注意,保存的是地址。在汇编里头,一切皆地址。当我们调用 result = printf( "%d %d", 12, a )的时候,编译器默
2012-12-29 12:42:22 3341
原创 GDB调试--以汇编语言为例
#rpm -qa |grep gdb下载:安装#tar -zxvf #./configure#make使用GDB以汇编语言调试为例汇编语言实现CPUID指令CPUIDcpuid是Intel Pentinum以上级CPU内置的一个指令(486级以下的CPU不支持),他用于识别某一类型的CPU,它能返回CPU级别,型号,CPU步进以及CPU字
2012-12-29 11:40:36 5214
原创 Java字节码研究
本文在本人2个博客https://blog.csdn.net/21aspnet和https://blog.csdn.net/unix21unix21同步发布1.String和常连池先上代码:public class TestApp { public static void main(String[] args) { String s1 = ...
2019-03-05 18:49:39 679
原创 Java字节码instrument研究
MyAgent项目<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocatio...
2018-08-21 15:54:36 933
原创 JVM虚拟机参数配置官方文档
JDK8 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.htmlJDK7 https://docs.oracle.com/javase/7/docs/technotes/tools/solaris/java.html官方博客 https://blogs.oracle.com/poonam/==============...
2018-04-08 11:23:51 1472
原创 Linux kernel futex.c的bug导致JVM不可用
JVM死锁导致线程不可用,然后会瞬间起N个线程,当然也是不可用的,因为需要的对象死锁,然后耗尽文件句柄导致外部TCP无法建议拒绝服务,jstack之后就会恢复。解决办法:替换中间件类库 ,比如httpclient的。原因大致是:某个switch分支缺少memory barrier的正确处理,导致外部应用如JVM的lock被错误锁住;一般jstack连后就恢复。https://github.com/...
2018-04-08 09:54:01 1393
原创 线上java问题排查
0.jps这个输出java进程pid#jps查看java的线程#top -Hp 25448如图25757这个线程比较耗时,看看他在做什么注意需要折算出线程pid的16进制值,然后jstack。可以打印更多信息#jstack pid | grep -A 20 649d参考:JVM调优之jstack找出最耗cpu的线程并定位代码
2018-01-18 11:24:38 867
转载 用“逐步排除”的方法定位Java服务线上“系统性”故障
说明:原文地址已经不可访问,其他地方有转载,不过很多丢失图片,所以,找到一处有图的重新配好图。用“逐步排除”的方法定位Java服务线上“系统性”故障Posted on 2014/08/25李斯宁(高级测试开发工程师)一、摘要由于硬件问题、系统资源紧缺或者程序本身的BUG,Java服务在线上不可避免地会出现一些“系统性”故障,比如:服务性能明显下降、部分(
2018-01-05 14:12:34 433
原创 Java常用命令及Java Dump
线程Dump,包含所有线程的运行状态。纯文本格式。堆Dump,包含线程Dump,幵包含所有堆对象的状态。二进制格式。Java Dump方法1.使用Java虚拟机制作Dump指示虚拟机在发生内存不足错误时,自动生成堆Dump-XX:+HeapDumpOnOutOfMemoryError2.使用图形化工具制作Dump使用JDK(1.6)自带的工具:Java Vi
2017-12-20 14:19:59 2151
原创 Java的SPI机制
Dubbo等框架使用到必须掌握。package org.hadoop.java;public interface IService { public String sayHello(); public String getScheme();}package org.hadoop.java;public class HDFSService impleme
2017-03-27 20:45:34 2589
原创 匿名内部类和传接口
匿名内部类也就是没有名字的内部类正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口参考:http://www.cnblogs.com/nerxious/archive/2013/01/25/2876489.htmlpublic interface MyInterface { public
2017-03-27 17:45:40 594
原创 编程经验
1.变量下面多处使用那么不应该直接在第一处修改 需要另一个变量或者开一个函数String TypeCode = (String) md.get("TypeCode"); if (!StaticUtil.XXXs.contains(TypeCode+"_")) { continue;
2017-02-06 11:06:45 380
原创 SpringBoot使用笔记
其实也是参考官方的:http://spring.io/guides/gs/rest-service/SpringBoot并不神秘,其最大的好处是可以帮你省略引用一堆jar包,需要神秘jar它自动帮你引用,集成tomcat,集成配置等待好处太多,总之就是更方便开发而已。还是自己体验下比较好。1.建立java应用程序起一个Maven的java应用程序,注意不要再起Web
2017-01-01 14:20:15 605
原创 Tomcat定时任务
原文:The load-on-startup element indicates that this servlet should be loaded (instantiated and have its init() called) on the startup of the web applicatio
2016-12-15 13:13:18 1944
原创 String和常量池
String s1 = "abc";// 放在常量池中 String s2 = "abc";// 从常量池中查找 String s3 = new String("abc");//new放在堆中 String s4 = new String("abc"); String s5 = s1.intern(); String
2016-12-02 13:15:17 491
原创 JVM内存溢出的几种情形
java虚拟机规范定义了两种异常与栈空间有关:StackOverflowError和OutOfMemoryError线程计算过程中 栈深度>最大可用栈深度 抛出StackOverflowError如果栈可以动态扩展,如果扩展过程中没有足够内存空间支持会抛出OutOfMemoryError-Xss设置栈大小,栈大小决定了函数调用的可达深度public class Test
2016-12-02 11:09:22 740
原创 MySQL常用性能分析方法-profile,explain,索引
1.查版本号无论做什么都要确认版本号,不同的版本号下会有各种差异。>Select version();2.执行状态分析显示哪些线程正在运行>show processlist;下面是完整的信息
2016-10-26 13:49:46 1264
原创 事务隔离机制原理分析以及是否可以防止订单超卖
事务的隔离机制是指:Read Uncommitted(读取未提交内容)Read Committed(读取提交内容)Repeatable Read(可重读)Serializable(可串行化)具体的解释最经典的MySQL书《高性能MySQL(第3版)》以及有了就不在其他地方再引用了:隔离机制的比较其实也有人喜欢用锁来控制并发,书中还提到了“隐式”和
2016-10-18 20:35:04 2663
原创 Spring源码分析【8】-分布式环境SpringSecurity保持用户会话
1.SpringSecurity的权限控制流程是这样的:用户登录,基础信息UserInfo存在SpringSecurity的ThreadLocal里。下面是contextHolder对象:final class ThreadLocalSecurityContextHolderStrategy implements SecurityContextHolderStrat
2016-10-14 17:49:19 4771
原创 Map和List静态初始化
public final static Map ServerIPMap = new HashMap() { { put("redis", "127.0.0.1"); put("solr", "127.0.0.1"); } };public final static List ComIPList =
2016-10-13 10:20:24 11361 3
原创 Spring源码分析【9】-SpringSecurity密码Remove原理
很明显代码已经说了认证完成移除credentials和其他某些安全数据// Authentication is complete. Remove credentials and other secret data// from authenticationorg.springframework.security.authentication.ProviderManager.auth
2016-08-29 18:36:00 896
原创 request.getSession(false)到底返回什么
HttpSession session = request.getSession(false);很明显传false如果session不存在返回Null。
2016-08-26 16:58:46 1849
原创 Spring源码分析【7】-Spring 模板页和JSP文件的编译
org.apache.jasper.JspCompilationContext.compilecreateCompilerisOutDated判断文件是否存在..\Apache\apache-tomcat-8.0.36\work\Catalina\localhost\ROOT\org\apache\jsp\WEB_002dIN
2016-08-16 14:05:22 969
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人