找出线上java应用中的哪段代码在大量耗费性能
你发现你的机器的cpu usage达到了100%,并且发现都是你的java应用导致的;但是,这个应用里具体哪段代码在这样吃性能呢? 以下来自一个同事的分享: 1. 先找出吃性能的线程: top -H -p pid,找出最耗性能的线程ID(最左列) 2. 获得线程ID的16进制表示: printf ‘0x%x\n’ 线程ID 3. 然后生成一下jstack,比如 kill -3 pid 4. 在生成的jstack里搜索 线程ID的16进制表示即可
你发现你的机器的cpu usage达到了100%,并且发现都是你的java应用导致的;但是,这个应用里具体哪段代码在这样吃性能呢? 以下来自一个同事的分享: 1. 先找出吃性能的线程: top -H -p pid,找出最耗性能的线程ID(最左列) 2. 获得线程ID的16进制表示: printf ‘0x%x\n’ 线程ID 3. 然后生成一下jstack,比如 kill -3 pid 4. 在生成的jstack里搜索 线程ID的16进制表示即可
执行 vmstat 其中的cs项就是每秒的上下文切换数
一个用shell写成的GC日志分析工具,用于进行各种统计,非常小巧好用。 下载: 点这里 使用: ./PrintGCStats -v cpus=4 ~/temp/gc.log #cpus代表逻辑cpu数 样例输出: 引用 what count total mean max stddev gen0(s) 4 15.606 3.90150 11.344 5.0888 gen0t(s) 4 15.607 3.90169 11.344 5.0888 cmsIM(s) 225 740.826 3.29256 3.908 0.3529 cmsRM(s) 224 654.354 2.92122 3.570 0.3063 GC(s) 229 1410.787 6.16064 11.344 -1.0000 cmsCM(s) 224 960.213 4.28667 6.262 0.1990 cmsCP(s) 448 …
在spring框架下使用注入annotation,应该用@Autowired还是@Resource? 基本上都差不多,但如果存在不同bean共享同一个java类的情况,则应该使用@Resource. 因为, @Resource寻找bean的顺序 Matches by Name Matches by Type @Autowired寻找bean的顺序 Matches by Type //如果存在不同Bean共享java类,就会出现NoUniqueBean异常 Matches by Name 更多请见 http://blogs.sourceallies.com/2011/08/spring-injection-with-resource-and-autowired/
visualvm如果出了问题,比如连不上应用、无法采样什么的,可以看一下日志文件: 帮助 => 关于
客户端所在局域网的网关的配置(SNAT): iptables -t nat -A POSTROUTING -s 192.168.0.2 -o eth0 -j MASQUERADE #把来自内网192.168.0.2的数据包通过eth0这个外网网口转发出去,并把数据包的源IP改成eth0网口的IP 服务器所在局域网的网关的配置(DNAT): iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j DNAT –to-destination 192.168.100.10:80 #把来自外网(网口eth0)的数据包的目标IP改为192.168.100.10,好让它最终到达内网里的192.168.100.10机器
查看当前规则: sudo iptables-save 设置默认规则: iptables -P INPUT DROP #如果所有过滤规则都不匹配,则丢弃数据包 插入一条规则: iptables -A INPUT -s 10.19.18.23 -j REJECT #拒绝从10.19.18.23进来的任何数据包 iptables -A INPUT -s 10.19.18.23/32 -p tcp -m tcp –dport 80 -j DROP #拒绝10.19.18.23访问本机80端口 iptables -A INPUT -p icmp –icmp-type 8 -j DROP #拒绝任何人ping我 iptables -A INPUT -m state –state ESTABLISHED -j ACCEPT …
摘自余洪春《构建高可用Linux服务器》 监听跟某主机有关的数据包:tcpdump host 10.19.18.23 监听跟某主机和端口(本机或对方)有关的数据包: tcpdump tcp port 8888 and host 10.19.18.23
这些文件之所以存在,是因为某些程序正在运行,如果你想强行删,一般都删不掉。 你可以试着退出一些程序,比如eclipse什么的,等程序退出了,这些文件可能就会自动消失
TCP Wrappers可用于配置基于程序名的过滤配置 要配置TCP Wrappers,只要修改/etc/hosts.allow和/etc/hosts.deny即可 比如 [root@www ~]# vim /etc/hosts.allow ALL: 127.0.0.1 #本机所有访问都允许 httpd: 10.0.0.100 #只允许这个IP访问httpd 另外,hosts.allow是白名单,hosts.deny是黑名单,两个同时用,怎么回事? 实际的规则是(鸟哥的原话): 1. 先以 /etc/hosts.allow 为优先比对,该规则符合就予以放行; 2. 再以 /etc/hosts.deny 比对,规则符合就予以抵挡; 3. 若不在这两个档案内,亦即规则都不符合,最终则予以放行。 最后要注意,TCP Wrappers并不支持对任意程序的配置。它主要用于httpd, ssh, vsftpd等服务。