自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(130)
  • 收藏
  • 关注

原创 python内存泄漏

python 内存泄漏定位不同的语言有不同定位的方式。对于golang 而言。pprof 工具已经足够了。C,C++,java 更是有自身的监控定位机制。这里单单阐述python的 内存泄漏。观察首先 我们可以从监控工具上看到内存的异常告警。于是开始定位是什么问题导致的。登录到具体容器上。ps -auxf 查看具体是哪个进程导致的内存暴涨。(一般也就是单服务容器)定位思路业务侧定位最近新上线的代码 通过对比排查对大表的select 操作,比如需要下载一个很大的excel。中间对数

2020-06-30 17:09:41 1262

原创 string rune byte 理解

string rune byte 理解golang 字符串类型是常用的处理字符串的类型。但是如果是判断len,以及使用处理单个字符的时候就需要使用 rune 或者byte 进行处理。string 底层存储数据结构type stringStruct struct { array unsafe.Pointer // 指向一个 [len]byte 的数组 length int // 长度}test := "hello" p := (*str)(unsafe.Poi

2020-05-13 11:54:59 322

原创 golang项目代码路径生成

golang项目代码路径生成golang 存在非常多的interface 类型而又没有办法直观的看到代码。这里可以使用 go-callvis 工具生成代码函数调用情况。下载安装下载安装 go-callvisgo get -u github.com/TrueFurby/go-callvis下载安装依赖 graphvizbrew install graphviz使用输入 go-...

2020-03-31 11:22:38 956

原创 golang hystrix 熔断器

golang hystrix 熔断器熔断器是为了保护被调方健康的一种方式。通过错误率,超时,并发等机制来使第三方处于一个健康且提供性能最佳的方式。hystrix 是比较通用的熔断器库。以下为介绍该熔断器源码以及处理思想。核心思想先看看需要配置什么参数,都是从参数玩出的花。Timeout: 执行command的超时时间。默认时间是1000毫秒MaxConcurrentRequests...

2020-03-26 09:23:24 1765

原创 PDF 文字识别

PDF 文字识别在实际工作生活中有时候需要参看pdf 文件写ppt 等文件。但是如果此时PDF 是图片格式那就沒有辦法去复制粘贴,这个时候需要把PDF 转为word 文档,或者把字copy 出来。OCR 技术就可以解决这个问题。很多PDF 阅读器其实内嵌了这种功能,但是都要付费。。。因为穷…以及不服,这个时候就可以到全球最大同性交友网站github找轮子。OCRmyPDFpdf OCR ...

2020-03-14 20:09:07 722

原创 tiDB小结

tiDB 小结字段无法更新问题tidb 存在精度只能升不能下降的问题。并且对于decimal 等类型精度甚至不允许修改。为了打破这个限制可以采取曲线救国的方式实现。分为三部曲:创建一个目标类型字段_new, 的形式。把数据从原有字段更新过来。删除原有字段。重命名new为原有字段名称。alter table `xx_tab` add column total_price_ne...

2020-01-07 10:03:21 724

原创 合并mysql 请求

合并mysql 请求这个需求是在多表合并当成单表的时候存在非常多的请求。在合并前是各个表的压力。合并后就变成了单个表的压力。相当于是qps 的累加。如果在应用测缓存了请求,进行合并,那么tiDB 端的压力就会小特别多。设计mergeProcess为了合并请求就需要缓存结果。缓存就很熟悉了。 "github.com/patrickmn/go-cache"合并请求那肯定是要有方...

2019-12-16 15:15:59 262

原创 golang 本地缓存

本地缓存针对使用非常频繁的表,如某些配置表,往往查询非常频繁并且是表非常小。这个时候可以采取缓存到内存中,定时的去reload 数据,刷新缓存。核心结构体type LoadDataFunc func(ctx context.Context, c *cache.Cache) (map[string]interface{}, error)type LocalCache struct {...

2019-12-16 11:28:15 5151

原创 mysql update_time

mysql update_time在 mysql中有一个DB 是 information_schema。顾名思义就是一些schema 的信息,表的结构,字段,占用大小等等信息都在其中。今天使用到的是其中的table表。information_schema tables如下是所有的字段的含义字段含义Table_catalog数据表登记目录Table_schem...

2019-10-20 10:59:59 1671

原创 地址查询优化

地址查询优化地址服务是比较常见的服务,一般国家地址分了3~4个层级,省,市,区,镇。一般的查询如名称,等级都比较好查询。但是如果是查询一个省下的所有级别地址往往可能需要查询3次DB,一次查询一个级别,如果碰到地址特别多的情况,如最后一级有1w个地址,使用select * from xx where id in(xx,xx…) 这种形式,性能也不会也别好。再者还有一种情况,如果是知道了区...

2019-10-20 09:14:03 175

原创 mysql tiDB limit offset

mysql tiDB limit offsetlimit offset 常使用于分页, 前端展示不下这么多东西会传一个 limit, offset. 或者是page, page_size 参数。后端查询之后就需要做分页。以前一直没注意需要配合order by 一起使用。线上使用中出现了重复,于是查看了mysql 分页的实现原理,加以对比。limit offset 的核心在于排序,在排序完之...

2019-10-19 10:49:02 1548

原创 CPU核数

CPU 核心数最近在项目上使用并发方式去读取文件并且计算分析以提升效率。使用的是python 语言。在查看日志日志之后下了一跳。我预想着测试环境depoly文件是配置双核CPU。应该也是2才对,结果和不一样。python 获取CPU核心import psutilpsutil.cpu_count() # CPU逻辑数量psutil.cpu_count(logical=False) # ...

2019-10-12 17:36:56 1270

原创 知识回顾

知识回顾基础架构服务端分为两大层:server 层存储引擎层server层层提供 连接器,分析器,优化器,执行器。连接器 客户端和连接器层进行里连接,最好不要使用-p 后面带密码,可能会泄漏密码。一般是长连接,如果8小时(默认值)没有动作会断开。长连接使用需要注意查询的时候是否会有特别大的查询,如果有需要定时断开连接,这样服务端内存才会释放。查询缓存 可以使用SQL_CACH...

2019-09-15 23:07:40 139

原创 桶令牌限流器

桶令牌限流器限流是高并发的保护法宝之一。可以这么理解,限流就是在自身能力下尽可能的提供服务。那么限流有哪些算法呢?相关计数器算法漏桶算法桶令牌算法计数器算法就是在固定的时间内只通过固定的请求。 没有缓冲的余地,对于尖刺流量处理并不友好。漏桶算法是固定的处理速度。桶令牌算法相当于是固定的请求入队速度。漏桶和桶令牌顾名思义都有个桶字,用來緩存部分的請求。桶令牌是更优的选择。r...

2019-09-09 10:42:43 481

原创 snowflaker 问题

snowflaker 问题之前由于使用了tiDB,需要实现一个snow flaker 算法。找了一下轮子没找到。看着也简单,于是自己写了一个。然后发现了有问题。python RLockpython 的RLockRLock就是一个线程获取了锁之后可以再次获得锁。比如:如下主线程可以在for循环中取得锁。import threadingclass _RLock: def ...

2019-09-06 18:40:47 582

原创 python 获取目录结构

python 获取目录结构目的: 按照某个基准目录展示分层。实现文件分层展示,可以控制层级。可以控制是否需要打印文件。主要点构建树。采取path_tree 结构构建,没有明显区分root和子树的概念因为结构都是一致的。设置level。因为这个结构可以理解为单向的链表树。增加level存储,用于展示的时候分层。层次遍历树结构。标准用法是使用stack结构。但是python似乎没有标准...

2019-09-05 15:37:51 1536

原创 golang 协程池

golang协程池golang 标榜轻量级协程。但是在大量创建协程后,调度性能以及GC的压力肯定会上升。那么在可预期的情况下我们可以选择控制并发数量(更推荐的做法). + 控制协程的数量。抱着传统的方式,当协程的数量过多,在创建与销毁之前占用了过多的时间的时候,我们通常就会考虑池化。通过空间换时间的方式来提升系统的性能。在google 一番后发现没有特别官方的一个协程库。看到比较多的是an...

2019-09-02 21:34:33 957

原创 golang 线上事故

golang 线上事故最近公司要做大促的一些活动。并且单量,qps持续上涨。之前使用的是django python 语言做的一个服务端。目前已经部署的国家里面最多的国家会有300+个实例。大促期间还可能会增加一个实例数。这么多的实例部署,回滚的时间都会特变长,除了问题也不好定位。并且如此多的一个机器,连接数* 实例数也会导致DB等其他服务扛不住这么大的并发。所以决定上go服务解决性能问题。...

2019-08-30 22:34:00 474

原创 golang redis 报错

golang redis 报错问题迁移项目中有一个需求。使用到了redis 设置。由于之前使用的是python。然后自然而然的以为golang的redis 设置单位也是秒。fork python的代码 是缓存5min。于是err = client.Set(key, 1, 5 * 60).Err()最终报错err:ERR invalid expire time in set遇到这...

2019-08-27 17:01:17 4121

原创 golang 内存泄漏

内存泄漏内存泄漏简直就是down机之源之一。实在可怕。最近线上就是碰到这个这个问题。一开始查到原因的时候我还不太相信。心想这个结构怎么可能消耗了这个大的一个内存??最后使用工具一看。。好吧。发现问题告警显示go服务的内存飙升到近乎100%。而且是每隔一段时间就会上涨一波,直至100%。但是这个版本之前并没有发现这个问题,那么是新增加的功能引入的问题?定位go还是有自己的定位手段的。特...

2019-08-25 14:42:06 1602

原创 golang 开启协程

golang 协程处理协程在golang中相对比较廉价。在特别在做对比的时候特别有优势。在服务重构切换的时候往往需要实现对比机制。新服务调用旧服务做对比上报。如果仅仅是用来上报数据。那么就可以异步化,不影响当前的流程。这时候开启协程无疑是最好的办法。版本一go compareFee(ctx)在得到当前运费的结果之后,开启协程。让他在新的协程调用旧服务,获取了之后对比完,上报cat ...

2019-08-14 11:52:49 2538

原创 CSRF 跨站攻击

CSRF 跨站攻击CSRF (Cross Site Request Forgrey).是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一。原理:站内发送请求一般需要一个登陆了的标志。一般存储在cookies 中。这个cookies会存在浏览器中,而发送请求的时候都会带上这个cookies。hacker 无法拿到这个数据。但是可以通过发送请求都会带上cookies...

2019-06-24 13:10:08 815

原创 mac 安装使用 DVMA

mac 安装使用DVMA通过学习dvma, 来学习基本的web安全基础知识,以前这一块都比较缺失,以下记录以下。git地址开源的相关介绍安装使用这里使用的是docker 镜像的方式。那么首先就需要有docker 软件,自己Z提前安装好。docker 下载连烈docker run --rm -it -p 80:80 vulnerables/web-dvwa看到如下信息就是在下...

2019-06-23 17:13:27 547

原创 大文件分片上传

大文件分片上传场景,在工作中很多文件都超过了10M。一般nginx 上传文件大小可能在8M的水平。如果这时候上传大文件,nginx 就会报错。方案修改nginx 配置。配置nginx 断点续传模块。使用http协议实现断点续传。nginx 修改过大可能对整体的健壮性造成影响。nginx 配置断点续传后还是需要做额外的处理,所以最终敲定使用http实现分片上传。设计单机,...

2019-06-11 15:07:01 829

原创 文件对比

linux 文件对比对于上传下载的文件经常需要对比文件是否一致。在linux, mac 使用 diff cmp 可以满足要求。diff一般使用 diffdiff a.txt b.txt比如diff grey_list.csv test_recon.csv这两个文件完全不一致1,3c1,5< channelid,entity_type,entity_id< ...

2019-06-11 14:45:05 277

原创 snow flake

snow flake分布式系统需要有一个方法去分配一个唯一的ID。如mysql 分表之后,如果各个表使用的都是自增ID 那么不同表之间的ID 就会重复,对于其他业务可能会认为是同一条数据,或者造成别的问题。所以需要一个分配ID的方法。通常有两种方式mysql使用mysql 最为关节节点,每次分配数百个ID到内存,然后应用再在内存中取值。这种方式较为复杂,并且依赖于分配器所在的DB,如...

2019-05-29 12:20:30 471

原创 csv excel 对比

对比csv excel 处理目前项目需要上传非常大的excel文件。几百兆到几个G之间。上传的问题还没有解决。但是load到内存也是个问题。excel 一般使用xlrd 包做解析,第一个操作肯定是open_workbook。但是在open_workbook的时候会把整个文件load 到内存,如果多个文件同时在做处理可能会内存溢出,所以存在很大风险。技术上对比csv. 看看两者个差异。准备工...

2019-05-17 13:28:31 2918

转载 NTP 时间同步

Linux服务器运行久时,系统时间就会存在一定的误差,一般情况下可以使用date命令进行时间设置,但在做数据库集群分片等操作时对多台机器的时间差是有要求的,此时就需要使用ntpdate进行时间同步。第一种情况:连的上外网先看几条重要命令:date命令:date :查看当前时间,结果如下:Tue Mar 4 01:36:45 CST 2014date -s 09:38:40 :设置当...

2019-03-28 09:50:34 9027

转载 GMP

golang中goroutine的调度郑宝杨(boya) 2018-08-01 [email protected]阅读源码前可以阅读的资料Goroutine背后的系统知识golang源码剖析-雨痕老师go-intervals也谈goroutine调度器golang的调度模型概览调度的机制用一句话描述:runtime准备好G,P,M,然后M绑定P,M从各种队列中获取G,切...

2019-03-23 08:48:04 776

原创 DB 延迟问题

DB 延迟问题线上碰到了很奇怪的问题,在同一个请求中。查询订单相关信息,第一次查询到的结果是新的,第二次查询到了是旧的。而第一次查询到的数据用于校验,通过了校验。但是到使用数据的时候,使用了旧数据更新导致问题。数据被覆盖第一个是怀疑数据被更新回旧数据。查看日志,发现并没有覆盖的日志。相反的,发现了上一个数据更新和现在的当前更新同时到达,怀疑DB 延迟。DBA 确认联系DBA 确认问...

2019-03-19 07:52:35 317

翻译 主线程创建线程 用户 内核观感

主线程创建线程 用户 内核观感https://stackoverflow.com/questions/9305992/if-threads-share-the-same-pid-how-can-they-be-identified问题I have a query related to the implementation of threads in Linux.Linux does not...

2019-03-08 13:34:01 128

原创 pycurl 安装问题

pycurl 安装问题项目相关依赖需要安装pycurl. 这时候gunicorn 无法启动。 安装上之后报错。ImportError: pycurl: libcurl link-time ssl backend (none/other) is different from compile-time ssl backend (openssl)Internal Server Error: /...

2019-03-07 21:35:36 1052 1

原创 安装M2Crypto

安装M2Crypto项目上有依赖问题,requirement.txt. 使用 pip -r requirement 的方式去安装。发现其中M2Crypto 一直安装不上。对这种问题我最为头疼。碰到个别出问题一般先单独处理。先单独安装M2Crypto,再安装整个requirement。安装相应的包google 大法好:直接googlemac m2crypto 安装失败得到这这...

2019-03-07 11:37:43 4769

原创 celery 线上问题

celery 线上问题环境项目中使用celery 去做异步化处理。针对不同的消息队列都会启动8个worker去消费。启动入口是supervisor,拉起django 的脚本。再由脚本去拉起所有的消费进程。问题线上celery 容器不停的挂死。通过监控可以看到内存过一段时间就会到达内存配置值。这时候项目跑不动。分析既然是内存不足,首先查看了每个进程的内存使用情况。htop...

2019-03-04 19:14:10 598 1

原创 类变量继承

类变量继承项目上发现一个bug。是类变量覆盖的问题,由此记录一下。基类类变量不可用super等方式赋值。注意其是类变量如果该变量在该类中有定义,则使用该值。如果没有,将搜索父类,多继承时采用C3方法,一般不存在交叉的类都是从左到右顺序搜索。搜索过程中如果前面父类的值被重新赋值,则类变量值将改变成该值class BaseClass(object): base_info =...

2019-02-21 17:29:21 653

转载 CAS原理及应用

CAS 无锁实现为了实现多资源争用就引入了锁,但是锁的性能并不是那么好。一方面通过调整锁的粒度来优化,一方面提出了无锁的方式 – CAS。——Compare &amp; Set,或是 Compare &amp; Swap。必须要明确的是这需要CPU指令的支持。在正常逻辑视角来看,对比,交换。是两个步骤,但是通过CPU指令集的优化可以把CAS作为原子操作。代码看一看内存*reg里的值是不...

2019-02-12 11:26:14 1076 1

原创 迭代对象 迭代器 生成器

python 迭代对象 迭代器 生成器区别以上三者和容器分不开。容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中。迭代对象 Iterable硬性规定就是实现了__iter__() 方法的就是迭代对象。通过 Iterable 判断是否是迭代对象。&gt;&gt;&gt; dic = {'a':...

2018-12-21 22:41:47 162

原创 python 递归

python 递归递归算是一直对我来说比较致命的一点,一直没有办法非常通透的理解。最近在业务上有一段代码几乎想不到非递归的场景。所以在这次加深了对递归的认识。python 递归的限制首先递归第一个要考虑的就是什么时候结束。结果条件没写好就会导致调用栈太深,甚至爆栈的危险。python在这里做了最大递归层数的限制。sys.getrecursionlimit()一般设置为1000。 当...

2018-12-18 16:24:03 307

原创 存储层以及缓存的一些想法

存储层以及缓存的一些想法近日工作中有一个动作是去updateDB中的数据,更新了几十万条数据。更新完了,业务测试没有通过。但是在test环境是ok的。首先说说公司的上线流程是 dev-&gt;test-&gt;uat-&gt;regression-&gt;live.对应的是 开发-&gt; 测试 -&gt; 业务测试(需求方)-&gt; 回归测试(测试对所有ticket进行整体回归) -&g...

2018-12-11 09:26:00 254

原创 celery

celerycelery 是python 做异步通信的工具包。首先我们要明白异步的原因,那就是用户可以允许的情况下,把耗时的操作拆分出去,这样子做到了当前的快速响应。同时也避免了用户一个耗时的操作因为内部资源的不足而出现超时的情况。celery使用了非常简单的方式实现了异步。主要是celery sender broker 到consumer的过程。安装celerypip install ...

2018-10-28 11:37:20 1153

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除