记一次MySQL CPU高占用事件
暴风雨前夕
前几天晚上,客户反映网站某个功能页面打开缓慢,半天都在加载没有返回结果。用户体验极差。接到消息之后马上起来排查问题,先浏览器查看接口返回,是一个查询接口引起的全是Timeout。后面上服务器TOP命令一瞧 CPU占用率及高,MySQL的占用达到了300%
MySQL-show processlist命令
SHOW PROCESSLIST显示正在运行(用户运行线程)的线程(或SHOW FULL PROCESSLIST显示更多信息)。您还可以从INFORMATION_SCHEMA PROCESSLIST表或mysqladmin processlist命令获取此信息。如果你有这个PROCESS特权,你可以看到所有的线程。否则,您只能看到自己的线程(即与您正在使用的MySQL帐户相关联的线程)。
JVM-内存区域
Ubuntu挂载新硬盘
本文是在windows和ubuntu双系统下,借助网上博客为Ubuntu 添加新硬盘,以及如何格式化分区和挂载。(前提windows已经添加好了新硬盘),在此做下备忘录。
df -l 显示硬盘挂载情况
sudo fdisk -l 命令检查当前的硬盘状态
sudo fdisk /dev/sdb 对 /dev/sdb 进行分区操作
FRP内网穿透工具
介绍
对于没有公网 IP 的内网用户来说,远程管理或在外网访问内网机器上的服务是一个问题:为了解决这个问题,则需要内网穿透,而内网穿透的方法有很多种,例如使用花生壳、ngrok等。本文章要介绍的是使用frp实现内网穿透
FRP 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。
布隆过滤器
前言
最开始在爬虫的时候因为URL去重了解到了布隆过滤器,而缓存穿透问题又使用到了布隆过滤。因此我又去加深理解了一番,这真是一个有趣的算法,故在此记下笔记以便以后复习总结。
基本思想
如果我们想要判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定。链表,树等等数据结构都是这种思路. 但是随着集合中元素的增加,需要的内存空间越来越大,检索速度也越来越慢。这种方法就不适用了,
但是有一种叫作哈希表的数据结构,它占用很小的内存空间而且有着高效的查询效率=》通过一个Hash函数将一个元素映射成一个位阵列(Bit array)中的一个点。这样一来,我们只要看看这个点是不是1就可以知道集合中有没有它了
Redis分布式锁
前言
在Java多线程编程的时候,锁是一个很重要也很基础的概念,锁可以看做是多线程情况下访问共享资源的一种线程同步机制。这是对于单进程应用而言的,即所有线程都在同一个JVM进程里的时候,使用Java语言提供的锁机制可以起到对共享资源进行同步的作用。如果分布式环境下多个不同线程需要对共享资源进行同步,那么用Java的锁机制就无法实现了,这个时候就必须借助分布式锁来解决分布式环境下共享资源的同步问题。
设计模式:建造者模式
前言
在开发中,经常用到builder设计模式,但感觉最常见的应用场景就是构造对象参数较多的时候,最近又用到了建造者模式,故在此梳理总结一下。
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。首先这是一个复杂的对象,也就是说对象的创建过程比较复杂,可能需要N多个组件来完成整个对象的创建,这个时候为了符合“单一职责”,我们将对象的构建过程分离出来,通过建造者来完成对象组件的创建,再通过一个指挥者类完成组装生成一个完整的产品。
理解使用python装饰器
概述
装饰器本质上是一个 Python 函数或类,它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能,装饰器的返回值也是一个函数/类对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景,装饰器是解决这类问题的绝佳设计。有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码到装饰器中并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能