- 博客(59)
- 资源 (1)
- 收藏
- 关注
原创 ScheduledThreadPoolExecutor源码分析
我们在ThreadPoolExecutor源码分析中分析了ThreadPoolExecutor的一些关键字段和方法,本文主要对ThreadPoolExecutor的子类ScheduledThreadPoolExecutor进行一些源码分析,本文基于JDK1.8.0_202。
2022-04-26 21:43:59 543
原创 处理IllegalAccessError
异常描述如下Caused by: java.lang.IllegalAccessError: tried to access method com.test.framework.replica.TopicUtil.get(Lcom/test/tool/AvailableZone;)Lcom/test/framework/replica/ReplicaTopicUtil$MostMatchIdc; from class com.test.framework.jedis.replica.JedisReplic
2021-07-20 21:10:48 3368
原创 进程卡住排查
ps auxf查看进程ID、进程状态、父子进程等信息pstree -p pid查看进程树yum -i install strace 安装strace工具strace -p pidsh-4.2# strace -p 96strace: Process 96 attachedwait4(-1,wait4(-1,表示正在等待子进程退出
2021-07-09 16:44:29 829
原创 mvn 跳过test和checkstyle
-DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。-Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。-Dcheckstyle.skip,忽略checkstyle。
2021-06-09 20:26:25 3261 2
原创 算法常用技巧:数学运算
(a + b + c) % k = (a % k + b % k + c % k) % k如果(a - b) % k = 0,那么a % k = b % k
2021-06-02 20:53:31 220
原创 Arthas使用方法记录
查看一个类是从哪个jar包加载的可以在启动java时加上-verbose:class参数,例如 java -verbose:class -classpath ‘./*’ xx.xx.Main使用Arthas的sc命令,sc -d org.apache.hadoop.hbase.client.Scan,从输出中的code-source中可以看到类是从哪个jar加载的。Java 可以使用 -classpath 参数指定依赖类所在位置。如果启动命令是java -classpath a.jar:b.jar
2021-05-18 12:02:29 1801
原创 su -l导致原来的环境变量消失了
假设我们现在是root用户,执行env或者export查看root用户相关的环境变量,假设有A=1, B=2, C=3。接下来,我们通过以下命令切换到用户Tom,再使用env或者export可能是查看不到root的几个环境变量的su Tom -l 可以看下su命令的manul,在使用su时推荐加上-l参数,加上后会清除掉除了TERM之外的环境变量。...
2021-05-10 21:17:29 659
原创 Mysql Online DDL工具gh-ost
阿里云文章链接:https://developer.aliyun.com/article/594722?spm=a2c6h.14164896.0.0.687732baJjVOFZgitHub链接:https://github.com/github/gh-ost/blob/master/doc/why-triggerless.md?spm=a2c6h.12873639.0.0.435a781fvsuYkn&file=why-triggerless.md
2021-04-29 15:29:11 100
原创 HTTP的几个超时时间
HTTP请求时connectionRequestTimeout 、connectionTimeout、socketTimeout三个超时时间的含义1.connectionRequestTimout:指从连接池获取连接的timeout2.connetionTimeout:指客户端和服务器建立连接的timeout,就是http请求的三个阶段,一:建立连接;二:数据传送;三,断开连接。建立连接超时后会ConnectionTimeOutException3.socketTimeout:指客户端和服务器建立连
2021-04-26 10:41:34 7511
原创 Java堆过大导致的OOM问题排查和MAT的使用
获取Heap Profile文件线上服务出现问题,第一步做的一定是及时止损,然后再找原因和修复。对于Java服务,如果启动参数配置了-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/woods -Dfile.encoding=UTF-8那么在服务OOM时直接就可以在相应路径下就可以拿到heap dump的heap profile文件了。但是,如果启动服务时没有指定以上参数,例如只是指定了-XX:+ExitOnOutOfMemoryErr
2021-04-18 21:53:05 743
原创 curl请求MultipartHttpServletRequest
Web服务器允许用户利用multipart请求,将本地文件上传到服务器。SpringMVC通过对ServletAPI的HttpServletRequest接口进行扩展,从而实现文件上传。Spring提供的接口是org.springframework.web.multipart.MultipartRequest,通过MultipartRequest#getFile方法,可以获取到用户上传的文件。一段代码@PostMapping("/upload")@ResponseBodypublic String
2021-04-18 20:51:49 541
原创 服务器小技巧-http.server与wget
通常我们可以使用rz sz来在服务器和自己机器之间实现文件传输。此外,如果服务器上没有安装rz sz,那么可以用python来开启一个简单的http服务器。假设当前在服务器的/home/woods/目录下,服务器的ip是198.1.1.188,该目录下有a.txt文件。使用如下命令,则可以开启一个服务器。python3 -m http.server 9111在另一个机器上,通过wget http://198.1.1.188:9111/a.txt则可以获取到a.txt了。注意这里是相对路径,即资源
2021-04-15 21:30:19 1146
原创 Mysql索引-可以给text字段建索引吗?
先给结论,直接在text字段建索引会报错;指定索引前缀的长度,并且长度小于等于767(utf8mb4字符集)、长度小于等于1023(utf8字符集)则可以创建索引。例如对于Mysql5.7,如下的语句会报错”索引长度最大为3072字节“非法CREATE TABLE `test_table` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id', `content` text NOT NULL COMMENT '内容'
2021-04-06 21:25:24 9278
原创 算法常用技巧:数组与矩阵
对于一个m行n列的矩阵matrix,左上角元素索引是0,右下角元素索引是m*n-1,将矩阵的每个元素逐行从左到右编号,那么编号是i的位置的元素是matrix[i/n][i%n]
2021-03-30 22:00:29 113
原创 BIO到NIO的演化
BIO到NIO的演化首先明确一点,网络通信最终都是走的操作系统内核,内核的IO功能不断演化,即内核增加增加新的系统调用,使得上层的应用程序能够使用新的系统调用完成更快更好的IO处理。● BIO时期(阻塞式的IO,因为accept和read都是阻塞的)程序想使用操作系统内核完成网络通信的话,如果程序是服务端,服务端启动先调用socket系统调用,得到一个文件描述符,比如3(0 1 2分别是stdin stdout stderr),之后调bind listen accept,等待客户端的连接(accep
2021-03-30 21:36:31 94
原创 Mac本地搭建Redis Cluster
配置步骤假设集群中使用3个redis node,端口分别是7000、7001和7002,那么创建三个目录node-7000,将redis.conf复制到node-7000,将redis.conf中的port改为7000,开启集群模式cluster-enabled yesnode-7001,将redis.conf复制到node-7000,将redis.conf中的port改为7001,开启集群模式cluster-enabled yesnode-7002,将redis.conf复制到node-700
2021-03-26 10:35:24 296
原创 Mysql的采坑记录1-慢查询拖垮服务
问题:服务日志中出现CannotGetJdbcConnectionException,如下所示,该怎么排查?org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, r
2021-03-21 20:38:16 252
原创 Curl请求@RequestBody List
@RequestBody标注在List作为参数,请求方式curl -H “Content-type: application/json” -XPOST -d ‘[{“name”:“ThreeBody”, “id”:1}]’ “http://localhost:9111/test/path” @RequestMapping(value = "/test/path", method = RequestMethod.POST) public String insertBooks(@RequestB.
2021-03-10 16:32:45 1586
原创 算法常用技巧:字符串
字符串预处理-对于字符串s,判断i到j的子串是否是回文串 int len = s.length(); // s[i ~ j]是否为回文串,如果s[i] == s[j]并且isPalindrome[i + 1][j - 1]是true,那么isPalindrome[i][j]也是true boolean[][] isPalindrome = new boolean[len][len]; for (int i = 0; i < len; i++) {.
2021-03-07 21:33:44 80
原创 大神博客汇总
Netflix的内核和性能工程师Brendan Gregg http://www.brendangregg.com/index.html
2021-03-05 10:49:13 157 1
原创 算法常用技巧:位运算
当且仅当正整数y&(y - 1)=0时,正整数y是2的整数次幂二进制表示中,奇数一定比前面那个偶数多一个 1,因为多的就是最低位的 1二进制表示中,偶数中 1 的个数一定和除以 2 之后的那个数一样多。因为最低位是 0,除以 2 就是右移一位,也就是把那个 0 抹掉而已,所以 1 的个数是不变的y & (y - 1)可以抹掉y最右边的1...
2021-03-03 20:32:47 177 2
原创 坑:@EnableScheduling你用对了吗?
我们可能会在服务中增加一些定时任务,这时候可能就会用到Spring中的@EnableScheduling,例如下面的代码。Main类中启动SpringFramework的IoC容器。package com.woods.schedule;import java.util.concurrent.TimeUnit;import org.springframework.context.annotation.AnnotationConfigApplicationContext;/** * @auth
2021-02-02 20:20:54 1292 2
原创 注意项:Java heap dump的坑
观察到服务的内存占用高,想把堆dump下来看看,然后你执行了下面的指令。jmap -dump:live,format=b,file=heap.hprof $pid之后使用MAT等工具打开查看,发现堆变小了?使用jstat -gc $pid看,出现了一次FullGC?查看GC日志,发现堆的大小从57.6G变成了16G?2021-01-24T10:29:55.221+0800: 131918.685: [Full GC (Heap Dump Initiated GC) 131932.469: [G
2021-01-24 21:21:57 801 1
原创 Mysql InnoDB: Page创建、Page Merging和Page Splitting
Page创建Mysql的InnoDB中,库windmills中有一张wmills表,这张表在磁盘中(路径通常是/var/lib/mysql/)由两个文件构成(5.6版本后innodb_file_per_table默认是1),如下data/ windmills/ wmills.ibd wmills.frm如果wmills表中有N个索引wmills.ibd文件中有N个SegmentSegment 每个Segment包含多个ExtentExtent 每个Extent默认
2020-12-30 20:54:03 465 1
原创 注意项:请查收来自SRE的机器
如果SRE向你的服务提供了物理机,你要把你的服务直接跑在这些机器上,或者跑在基于这些机器的docker上,那么在接收机器时,你要注意写什么呢?机器的内核版本是不是比较新的并且是稳定的机器上是否安装了公司基础的组件机器是不是过老或者有坏盘这些确定后再收这些机器,别傻乎乎的直接拿来用,直到出问题才后悔莫及。另外,也可以看看服务正在使用的机器是不是符合以上条件。最后,别问我怎么知道的。: )...
2020-12-29 21:28:08 103
原创 注意项:dockerFile中安装常用的运维工具
自己打镜像的时候,如果依赖的基础镜像中没有一些常用的Linux运维工具,需要自己记得提前安装一下,免得线上出现问题需要排查时才发现没有工具。一些常用的如下RUN yum install -y telnet && yum install -y iproute && yum install -y net-tools && yum install -y htop && yum install -y sysstat && y
2020-12-26 18:44:54 524 1
原创 技能点:查看进程使用的磁盘IO
如何查看进程使用的磁盘IO?磁盘的IO使用率达到100%,需要找出哪个进程使用的磁盘IO大,怎么做?使用iotop命令。在使用时可能会出现以下报错,报错是说需要root用户才能执行,但是在docker中,root用户执行iotop命令也会报错。。。难受的一匹。Netlink error: Operation not permitted (1)The Linux kernel interfaces that iotop relies on now require root priviliges
2020-12-24 20:59:48 1646
原创 存储管理:地址空间、交换技术与虚拟内存
存储器抽象无抽象最简单的存储器抽象就是无抽象,即进程直接访问物理内存地址。主要有一下两个问题:如果一个进程可以访问内存中的每个字节,很容易破坏操作系统。难以同时运行多个进程。多个进程可能会同时修改同一个内存地址,造成进程的崩溃。地址空间地址空间是对内存的一种抽象,类似进程是对CPU的抽象。地址空间是一个进程可用于寻址内存的一套地址集合。每个进程都有一个自己的地址空间,并且这个地址空间独立于其他进程的地址空间(除了特殊情况下进程需要共享他们的地址空间)。地址空间的一种简单实现方式基于基址寄
2020-12-21 10:04:52 255
原创 操作系统-Shell是怎么执行的?
我们在使用Linux时 ,通过Shell与操作系统交换,那Shell是怎么执行的呢?答案是通过fork进程执行,例如我们在shell中执行cp file1 file2实际上shell会通过fork系统调用为我们创建一个进程,在这个进程中执行我们的命令,如下面代码所示。while(1) { // 在屏幕上显示提示符 type_prompt(); // 从终端读取用户的输入 read_command(command, parameters); if (fork() != 0) { //
2020-12-20 18:23:29 368 1
原创 操作系统-CPU和存储器的一些概念
概念cpucpu的主要工作时取指执行,即在每个cpu周期中,从内存中取出指令、解码以确定其类型和操作数、执行。单个cpu一次只能执行一条指令。用户态和内核态是CPU的两种模式运行在内核态时,CPU可以执行指令集中的所有指令,使用硬件的每种功能。操作系统运行在内核态。用户程序运行在用户态,只能执行整个指令集的一个子集中的命令。存储器存储器的目标是速度快、容量大、价格低。但是目前的技术无法同时满足这几点,所以出现了不同的存储器。类型典型容量典型访问时间寄存器KB1n
2020-12-19 18:39:23 694 2
原创 LeetCode-20200821-20200927
钥匙和房间题目。把二叉搜索树转换为累加树。给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/convert-bst-to-greater-tree思路。给定的是一个二叉搜索树,我们知道二叉搜索树的中序遍历结果是一个非递减的序列。因此我们可以先遍历一遍树,得到所有节点的和。然后再
2020-09-26 20:17:16 91
原创 SpringFramework:加与不加@Configuration的区别
1 不加@Configuration注解情况1两个POJO类A和B,注意A和B都没有标注@Component等注解。配置类App,注意App类并没有标注任何注解。App内部使用@Bean注解标注了两个方法generateA和generateB。主类Main,我们创建IOC容器时将App.class作为参数传入。package com.woods.configuration_test;/** * @author woods * Created on 2020-08-04 */publi
2020-09-12 10:15:07 740
原创 LeetCode-20200831-20200906
钥匙和房间题目。有 N 个房间,开始时你位于 0 号房间。每个房间有不同的号码:0,1,2,…,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。在形式上,对于每个房间 i 都有一个钥匙列表 rooms[i],每个钥匙 rooms[i][j] 由 [0,1,…,N-1] 中的一个整数表示,其中 N = rooms.length。 钥匙 rooms[i][j] = v 可以打开编号为 v 的房间。最初,除 0 号房间外的其余所有房间都被锁住。你可以自由地在房间之间来回走动。如果能进入每个房间返
2020-09-07 23:28:56 558
hotspot-virtual-machine-garbage-collection-tuning-guide.pdf
2020-08-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人