- 博客(70)
- 资源 (3)
- 收藏
- 关注
原创 彻底理解Prometheus查询语法
写在前面主要参考:https://github.com/yunlzheng/prometheus-book本文档主要分为两部分,分别讲解PromQL和Grafana的基础使用,在阅读PromQL部分时,建议不要联想Grafana中要怎么使用这些查询表达式,又是怎么根据查询结果绘图的,因为PromQL对于Grafana来说和SQL并没有区别,都是查询出结果,然后根据各种指定配置进行绘图,所以阅读......
2020-04-28 20:53:22 76791 11
原创 Python 在 Asyncio 中运行阻塞任务,避免影响主任务调度
使用FastAPI等异步框架开发接口时,如果接口实现逻辑中有大量阻塞任务,会阻塞loop调度,大大影响服务性能,甚至还不如传统多线程框架(tomcat)!可以使用asyncio.to_thread包装下阻塞方法,防止阻塞当前调度。可以看到异步任务并没有等待阻塞任务。
2024-09-02 15:09:00 373
原创 Python协程和线程的区别
多线程是通过cpu分片实现并行,所有线程雨露均沾(可能操作系统有优化,但本质还是这个),比如一个线程执行到request请求时等待响应,假如响应需要60秒,很快就因为分片到时而释放cpu,但很快该线程又会被分配新的分片又会一直执行到分片到时,循环往复,也就是说这60秒内分配给该线程的cpu分片都是无效的!协程是通过程序控制调度,当执行io时,可以通过await关键字来避免给任务分配cpu分片,提高cpu的效率。
2024-08-29 11:32:55 475
原创 Rule-Engine-Starter V1.0.0
Rule-Engine-Starter 是一个轻量级规则引擎,V1.0.0主要解决条件匹配问题。比如飞书文档,每个文档都可以设置访问权限,可以限制哪些人、哪些部门可以访问、是否对互联网用户公开等等,这些条件可以看成每个文档设置的访问规则,一个文档可以设置多个规则。校验一个用户是否能访问目标文档,只需要校验规则中的条件,可以使用SPEL等表达式来实现;但是如果想获取一个用户有访问权限的所有文档,如果再用SPEL实现岂不是需要遍历所有文档的所有规则,这种方案无疑是低效的。因此自研。
2023-10-10 16:16:42 480
原创 UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only
事务提交时发现事务已被标记为回滚(rollback-only)。请求接口/test会复现UnexpectedRollbackException异常。原因是在调用TestService的事务方法test时,spring会创建一个事务,在调用DealService的事务方法deal时,spring默认传播Propagation_Required,即被调用时如存在事务则使用该事务,因为deal方法的事务和test方法的事务是同一个事务。
2023-08-09 17:47:10 958
原创 SpringSecurity5-教程2-登出源码分析
可以看到有两个handler,分别是SecurityContextLogoutHandler和LogoutSuccessEventPublishingLogoutHandler,首先浏览器访问http://localhost:8035/,输入用户名root和密码root完成登录;学习,其实在之前教程中,在FilterChainProxy中看到过LogoutFilter,这个就是默认的登出Filter;可以看到只要是/logout请求,均判断为登出请求;可知默认重定向到/login?
2023-03-21 16:52:19 463
原创 SQL Mybatis 多层foreach + uinon
表user:DROP TABLE IF EXISTS user;CREATE TABLE user( id BIGINT(20) NOT NULL COMMENT '主键ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年龄', email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱', PRIMARY KEY (id
2022-05-09 19:33:57 474
原创 CPU飙升
1、故障现象客服同事反馈平台系统运行缓慢,网页卡顿严重,多次重启系统后问题依然存在,使用top命令查看服务器情况,发现CPU占用率过高。2、CPU占用过高问题定位2.1、定位问题进程使用top命令查看资源占用情况,发现pid为14063的进程占用了大量的CPU资源,CPU占用率高达776.1%,内存占用率也达到了29.8%[ylp@ylp-web-01 ~]$ toptop - 14:51:10 up 233 days, 11:40, 7 users, load average: 6.85,
2022-05-06 13:19:48 523
原创 源码分析Spring解决循环依赖问题
测试代码@Slf4j@Datapublic class A { B b; public void fun() { log.info("A fun"); b.fun(); }}@Slf4j@Datapublic class B { A a; public void fun() { log.info("B fun"); }}public class Test { public static void main(String[] arg
2022-04-13 15:55:06 133
原创 MYSQL order by 索引 为什么还全表扫描+文件排序?
有一张表:CREATE TABLE `t1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, `c` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`), KEY `ic` (`c`(19)) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSE
2022-04-12 20:35:56 2274
转载 MYSQL or 导致索引失效
Mysql版本 5.6.50新建表:CREATE TABLE ttt (id mediumint(8) unsigned NOT NULL AUTO_INCREMENT,a mediumint(8) unsigned NOT NULL DEFAULT ‘0’,b mediumint(8) unsigned NOT NULL DEFAULT ‘0’,PRIMARY KEY (id),KEY idx_a (a) USING BTREE,KEY idx_b (b) USING BTREE) EN
2022-04-11 15:07:26 2820
原创 慢SQL-mysql in + order by id + limit 导致的慢SQL
背景有通知表,建表SQL如下:CREATE TABLE `perf2_notice_info` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `notice_type` varchar(32) DEFAULT NULL COMMENT '通知类型: ALIWORK_TODO_TASK、EMAIL', `deal_status` varchar(32) DEFAULT 'NOT_START' COMMENT '
2022-04-10 00:57:08 3177
原创 慢SQL-处理思路
通过explain 分析原因type至少为range、ref、const,如果为all和index说明执行了全表扫描extra中如果出现using filesort 和 using temporary 则可能因为排序和或者使用临时表导致SQL性能差,使用using index(覆盖索引) 或者 using index conditon(索引下推)来提高性能。优化索引索引失效最左匹配索引:KEY `idx_shopid_orderno` (`shop_id`,`order_no`)SQL 语
2022-04-09 22:29:26 960
原创 fastJson深拷贝
在调用toJsonString时一定要指定打印类型信息(SerializerFeature.WriteClassName),否者反序列化时因没有具体类型导致信息丢失!比如:import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.serializer.SerializerFeature;import lombok.Data;import org.junit.jupiter.api.Test;/** * @author zhou
2022-03-29 21:49:03 1712 1
原创 抽象工厂模式
抽象产品类public interface AbstractProduct { /** * 返回产品名字 */ String getName();}抽象工厂类/** * 抽象工厂类 */public interface AbstractProductFactory { /** * 生产实例 */ AbstractProduct create(); /** * 动态返回工厂 */ static AbstractProductF
2022-03-28 22:10:21 215
原创 线上故障排查思路
思维导图MySQL 排查常用命令# 查询慢SQL查询是否开启show variables like 'slow_query_log';# 查询慢SQL的时间show variables like 'long_query_time';# 查看慢SQL存放路径,一般:/home/mysql/data3016/mysql/slow_query.logshow variables like 'slow_query_log_file';# 查看数据库的事务隔离级别,RDS:READ-COMMIT
2022-03-11 15:19:25 2232
原创 Stream 常用语法
flatMap 多个list/stream汇成一个steamList managerJobs = managerMap.values().stream().flatMap(Collection::stream).map(DocEmpInfoDO::getJob).collect(toList());
2021-09-24 17:26:00 239
原创 springboot 优雅停机
目前SpringBoot内置的四个嵌入式Web服务器(Jetty,Reactor Netty,Tomcat和Undertow)以及响应式和基于Servlet的Web应用程序都支持优雅关机。配置宽限期后,在关闭时,Web服务器将不再允许新请求(但是并不会立刻返回失败),并且将等待宽限期以使活动请求完成。Demo尝试1. SpringBoot版本大于2.3.0.RELEASE2. 在application.properties添加配置## 开启优雅停机, 如果不配置是默认IMMEDIATE,
2021-07-10 15:51:33 707 1
转载 Java 线程池的异常处理机制 错误使用submit导致异常被吞掉,导致UncaughtExceptionHandler不生效
一、前言线程池技术是服务器端开发中常用的技术。不论是直接还是间接,各种服务器端功能的执行总是离不开线程池的调度。关于线程池的各种文章,多数是关注任务的创建和执行方面,对于异常处理和任务取消(包括线程池关闭)关注的偏少。接下来,本文将从 Java 原生线程、两种主要线程池 ThreadPoolExecutor 和 ScheduledThreadPoolExecutor 这三方面介绍 Java 中线程的异常处理机制。二、Thread在谈线程池的异常处理之前,我们先来看 Java 中线程中的异常是如何被处
2021-05-25 15:04:24 4345
原创 spring ResponseBodyAdvice 消息转换器 消息转换失败
当Rest方法返回String类型响应时,如果ResponseAdvice对响应进行封装成对象则会报错!@Slf4j@RestControllerAdvicepublic class RestResponseBodyAdvice implements ResponseBodyAdvice<Object> { @Override public boolean supports(MethodParameter returnType, Class<? extends Htt
2021-05-19 17:27:27 1733 2
原创 BeanUtils getProperty的一个坑
背景介绍短信平台需要支持多种短信的发送,短信文案皆不相同,假设有以下类@Datapublic abstract class MsgBase { public static final String ALIBABA_GROUP = "阿里巴巴集团"; public static final String ANT_GROUP = "蚂蚁集团"; /** * 接收人手机号 */ private String receivePhone; /**
2020-12-24 13:27:51 2236
kettle-pack镜像
2023-05-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人