
性能定位
文章平均质量分 58
shy_snow
这个作者很懒,什么都没留下…
展开
-
linux性能监控小工具nmon
nmon是单机性能监控工具,安装方便,只需要在想监控的机器上执行yum install nmon 即可。可以通过nmon命令查看实时性能,也可以通过指定收集频率和时长在后台收集各性能指标生成文件到指定目录,然后下载文件后使用分析工具生成execl图表。优点是简单,命令行摸索下就熟悉了, 也可以下载记录的文件使用分析工具生成execl图表。缺点是每台机器都要安装,机器多的话比较麻烦。安装(需要root权限): yum install nmon实时查看性能: nmon 进入后再按m可以打开或关闭内存原创 2022-02-08 09:33:30 · 1450 阅读 · 0 评论 -
JDK的bug导致Java文件删除不了,必须fgc
在windows系统下jdk无法释放已缓存的文件,导致文件无法删除,所以需要主动调用System.gc()原创 2021-12-31 15:34:35 · 783 阅读 · 0 评论 -
mysql锁表定位
select s.*,hw.* from (select curtime() curtime, h.trx_mysql_thread_id holder, timestampdiff(second, h.trx_started, now()) elap_sec, rpad(ifnull(h.trx_query, 'null'), 50, ' ') sqltext, group_concat(w.trx_mysql_thread_i...原创 2022-02-03 10:34:26 · 309 阅读 · 0 评论 -
慢日志定位到备份锁表Waiting for global read lock原因
show processlist;发现大量阻塞状态的事务,提示Waiting for global read lock全库锁了15分钟,到数据库主机查看慢日志,发现果然在那个时段有人执行了FLUSH TABLES WITH READ LOCK的操作。原创 2021-11-23 12:45:52 · 4501 阅读 · 0 评论 -
定时执行sql统计数据库连接数并记录到表中
压测时想监控数据库连接数变化,自己写个shell脚本在crontab里定时查询并输出到日志。shell脚本如下:#!/bin/bashfor a in {1..12}do mysql -h 192.168.128.136 -u root -pYourRealPassword -e "select now() logdate,substring_index(host, ':', 1) host, count(*) cnt from information_schema.processlist原创 2021-11-03 12:22:45 · 345 阅读 · 0 评论 -
close_wait过多解决后TIME_WAIT过多
基本都是代码原因,比如HttpClient没有关闭连接、数据库连接没有关闭。了解TCP的三次招手和四次回收会原创 2021-06-09 16:40:19 · 652 阅读 · 0 评论 -
jtopo绘图帧数与cpu使用率
jtopo绘图页面一打开,cpu就飙高原创 2021-06-09 16:18:58 · 191 阅读 · 2 评论 -
使用jsp页面查看jvm使用情况
把下面的jvm.jsp放到项目里就能在前台访问这个jsp来查看web后台的jvm内存使用情况jvm.jsp<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ page import="java.lang.management.*"%><%@ page import="java.util.*"%><!DOCTYPE html原创 2021-02-20 11:02:52 · 384 阅读 · 0 评论 -
mysql存储过程中in条件多个值,使用临时表解决
select IFNULL(GROUP_CONCAT(id_batch),'-1') into V_ID_BATCH from ( select id_batch from tableA)aa;select * from TABLE_STATUS WHERE ID_BATCH IN ( V_ID_BATCH );原创 2020-12-21 17:16:10 · 1406 阅读 · 0 评论 -
jmap查看java进程占用的数据库连接数
jmap可以查看jvm中的对象数量,可以用来查看内存中创建的数据库连接对象的个数,从而判断jvm中已经创建的数据库连接。oracle的连接对象可以使用oracle.jdbc.driver.T4CConnection ,mysql的连接对象可以使用com.mysql.jdbc.JDBC4Connection一、oracle连接对象jmap -histo:live pid|grep oracle.jdbc.driver.T4CConnection.可以看到有166个oracle连接.原创 2020-11-25 11:41:47 · 4014 阅读 · 0 评论 -
Delete带有子查询的sql优化,改为innerJoin解决
delete语句很慢,明明有索引也不走DELETE FROM r_verify_result where ID_RULE_INFO in (select t2.ID_RULE_INFO from etl_verify_INFO t2 where t2.id_batch = 343042 and t2.id_jobentry = 7155)看了delete执行计划的确不走索引,但是select就走索引。改成下面这种inner join方式的就走索引。只能说是mysql的问题了。DELETE t1 ..原创 2020-11-14 11:05:27 · 706 阅读 · 0 评论 -
mysql并发死锁问题解决
一般根据多条件过滤后更新update在高并发的时候会导致死锁,进而事务失败。这是因为mysql行级锁并不是直接锁记录,而是锁索引,如果一条SQL语句用到了主键索引,mysql会锁住主键索引;如果一条语句操作了非主键索引,mysql会先锁住非主键索引,再锁定主键索引。参考:https://blog.youkuaiyun.com/guanfengliang1988/article/details/80356648https://blog.youkuaiyun.com/usst_lidawe...原创 2020-09-23 22:18:47 · 989 阅读 · 0 评论 -
linux的cache过高的原因定位与解决echo 3 > /proc/sys/vm/drop_caches
一、在crontab定时执行echo 3> /proc/sys/vm/drop_caches清理缓存。治标不治本。二、hcache -top 10查看缓存文件,删除后其缓存将永久清除。三、把没用的大日志文件清理删除掉,查找大于1G的文件find / -type f -size +1G。四、将vm.extra_free_kbytes设置为vm.min_free_kbytes和一样大,提高low阈值,触发操作系统自动回收缓存。...原创 2020-09-23 09:12:15 · 36681 阅读 · 1 评论 -
mysql数据库连接空闲超时设置不生效,未区分全局变量及interactive_timeout设置
为了测试数据库超时(默认8小时),需要修改数据库超时时间。但是设置之后发现并没有改变,有两个原因:第一个就是未区分全局变量和会话变量,设置和查询时带上global查询的是全局变量。第二个是因为超时时间是interactive_timeout和wait_timeout共同决定的,需要同时修改interactive_timeoutshow VARIABLES like '%timeout%' ;set global interactive_timeout=57600;set global .原创 2020-07-08 00:05:54 · 1598 阅读 · 0 评论 -
存储过程未rollback导致锁表
整个系统业务阻塞,最后居然是因为一个简单的存储过程导致锁表.DROP PROCEDURE IF EXISTS P_COUNT;CREATE PROCEDURE P_COUNT(OUT o_ret VARCHAR(50))BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION SET o_retsult=-1; START TRANSACTION; update tb_count set val= val+ 1; COMMIT;END解决:异原创 2020-06-28 12:13:21 · 593 阅读 · 0 评论 -
无法执行任何java命令,报错OutOfMemoryError: Cannot create GC thread. Out of system resources
生产程序功能不执行了,远程定位时发现无法使用jps,jstack甚至java -version命令,所有的java命令都无法执行,报错为无法创建线程.$jps -mlError occurred during initialization of VMCannot create VM thread. Out of system resources.查看程序日志发现有unable to create new native thread类似无法创建线程的报错内存及CPU空闲较多,资源充足排除内存不..原创 2020-06-16 13:50:39 · 2876 阅读 · 0 评论 -
JDBC未设置socket超时导致应用程序的线程池阻塞
应用阻塞,查看堆栈https://www.jianshu.com/p/2deaf51bf715原创 2020-05-15 07:52:59 · 1325 阅读 · 0 评论 -
tomcat启动时SecureRandom耗时
新部署tomcat发现启动时SecureRandom实例化耗时98秒,机器性能没问题。网上搜索了下是安全随机数生成的问题。解决办法有两个:方法1. 修改tomcat的bin下的catalina.sh文件加入-Djava.security.egd=file:/dev/./urandom方法2. 配置jdk路径下的java.security$JAVA_PATH/jre/lib/...原创 2020-04-01 16:38:58 · 272 阅读 · 0 评论 -
Linux系统内存还有剩余就开始使用swap交换区了
程序运行缓慢,查看内存剩余的时候发现Linux系统内存还有60G剩余就开始使用swap交换区了。系统把物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。这个swap交换区就是硬盘的一块区域。...原创 2020-03-20 06:46:07 · 7043 阅读 · 1 评论 -
oracle数据库inactive状态session过多的原因定位
新功能上线后,数据库告警,session连接接近最大值,有耗尽的风险。开始定位解决这个风险问题,首先查看这些连接都在执行什么sqlselect sql_text,se.* from v$sql s, v$session sewhere se.prev_hash_value=s.hash_value and se.status='INACTIVE' and se.username ='...原创 2019-05-30 19:32:05 · 12369 阅读 · 0 评论 -
java的VIRT高的问题理解
java程序的VIRT很高10G以上,研究了网上文章得出结论:不影响也不会占用内存,不用管。VIRT是虚拟的地址空间,在使用 mmap 并设置 MAP_NORESERVE 标志时并不会占用内存或交换区。通过pmap -x可以查看到anon分配的内存块,是glibc在版本 2.10 引入的 arena 新功能导致对每个线程都分配一个本地arena来加速多线程的执行,所以多线程程序分配的虚拟内存会...原创 2019-06-06 11:09:59 · 3484 阅读 · 0 评论 -
系统运行缓慢的问题定位步骤
首先 top查看cpucpu高 top -Hp 查看进程下cpu高的线程用户线程cpu高 jstack结合堆栈查看线程执行代码gc线程cpu高 jmap dump:format=b,file= 导出系统当前的内存数据,结合代码定位cpu低 接口调用耗时 --> 压测+jstack 功能突然出现停滞 -->多次调用并比较哪些用户线程一直处于等待状...原创 2019-04-19 13:43:20 · 961 阅读 · 0 评论 -
GC overhead limit exceeded
"GC overhead limit exceeded"表示JVM垃圾收集一直在运行导致应用运行缓慢。在垃圾收集后,如果Java进程花费大约超过98%的时间来进行GC且恢复不到2%的堆内存,就会抛出java.lang.OutOfMemoryError异常,一般是因为大量运行时数据被勉强填充到了堆内存中。解决办法:增加堆内存,使用-XX:-UseGCOverheadLimit参数关闭这个限制。...原创 2019-04-19 10:11:33 · 11096 阅读 · 0 评论 -
java进程因机器内存不足被系统kill的定位
查看日志发现进程被killer了,history未发现kill记录,说明不是人工杀死。查看机器内存使用监控发现当时机器内存使用100%。怀疑是被系统杀死了,linux可以设置内存用尽时根据得分杀死一些进程的OOMkiller特性(损失最少的工作,释放最大的内存同时不伤及无辜的用了很大内存的进程,并且杀掉的进程数尽量少)。查看/var/log/messages发现的确是被系统杀死了。...原创 2019-04-07 03:16:12 · 2155 阅读 · 2 评论 -
一次java线程死锁的定位
ETL流程卡死原因定位一、现象:模板大量并发执行流程,经常流程节点脚本运行完成之后,卡死,不更新状态,不继续往下执行。查看日志未发现任何异常信息。二、定位。jps -ml查看进程号pid,然后jstack -l pid输出线程dump文件,分析发现有死锁。经过分析为模板并发流程更新节点状态与流程保存日志方法调用数据库连接时的死锁。查看这两个线程的堆栈在哪个方法,以及各自持有的锁...原创 2018-12-23 00:46:55 · 535 阅读 · 0 评论 -
java.lang.OutOfMemoryError内存溢出定位
OM内存溢出定位增加异常时记日志参数 -XX:+HeapDumpOnOutOfMemoryError 该参数在JVM内存溢出时会记录堆转储文件java_pid%p.hprof。(%p为进程号) -XX:HeapDumpPath=/tmp/dump 该参数设置堆转储文件保存的目录。 GC分析 查看JVM的设置 jps -v|grep pid ...原创 2018-02-09 23:55:44 · 828 阅读 · 1 评论 -
shell调用hive客户端导致nohup后台进程stopped
nohup启动java进程调用shell执行hive客户端命令导致nohup进程stopped,java进程消失了。环境变量增加export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Djline.terminal=jline.UnsupportedTerminal"后解决。看网上说:如果后台程序试图读取终端,这并不是一个错误,但是终端驱动程序将...原创 2019-06-27 14:08:08 · 1448 阅读 · 2 评论