- 博客(719)
- 资源 (15)
- 收藏
- 关注
原创 golang 故障模拟工具failpoint的使用
测试是功能上线之前的重要环节。测试过程中,要尽量覆盖各种场景。故障情况或异常情况下的场景测试,也是必不可少的。如何模拟故障呢?在FreeBSD 中, failpoints经常用来模拟故障。在golang,也有failpoint的实现,就是目前pingcap 公司的开源项目failpoint.下面介绍golang中的failpoint的实现。1.安装failpoint工具cd $GO...
2019-11-15 20:09:27 1762
原创 golang中mysql建立连接超时时间timeout 测试
本文测试连接mysql的超时时间。这里的“连接”是建立连接的意思。连接mysql的超时时间是通过参数timeout设置的。1.建立连接超时测试下面例子中,设置连接超时时间为5s。MySQL server IP是192.168.0.101,端口3306。每3s执行一次SQL。// simple.gopackage mainimport ( "database/s...
2019-10-27 21:46:51 5821
原创 Golang 空指针nil的方法和数据成员
golang中,有一个特殊的指针值nil.如何使用nil没有方法和成员变量呢?下面来看下具体例子。程序中,定义结构体类型Plane, 将Plane类型的指针作为函数的参数,然后传入nil作为实参。在函数中,使用nil访问Plane的方法。package mainimport ( "fmt")type Plane struct { Num int...
2019-10-17 22:49:40 3183
原创 MySQL使用空事务解决slave从库errant问题
MySQL集群一般部署为主从架构,主库专门用于写入数据,从库用于读数据。异常情况下,在从库上写入数据,就会出现主从数据不一致问题,称为errant。如果从库上的这些数据主库上已经有了,或者主库不需要这些数据,我们就可以使用空事务解决errant问题。接下来,本文介绍如何使用空事务解决errant问题。首先查看主库的GTID集合:>show master status\G*****...
2019-10-17 22:17:46 528
原创 MySQL 如何使用show processlist进行过滤
在使用show processlist的时候,直接使用会显示很多的内容,无法很快找到需要的信息。如何过滤操作呢?其实,show processlist展示的内容是从information_schema.processlist数据表查询得到。数据表information_schema.processlist各字段如下:mysql> desc information_schema.pro...
2019-10-14 20:21:43 11719
原创 MySQL 的连接时长控制--interactive_timeout和wait_timeout
在用MySQL客户端对数据库进行操作时,如果一段时间没有操作,再次操作时,常常会报如下错误:ERROR 2013 (HY000): Lost connection to MySQL server during queryERROR 2006 (HY000): MySQL server has gone awayNo connection. Trying to reconnect...这...
2019-10-13 17:37:38 13983 3
原创 查看MySQL 连接信息--连接空闲时间及正在执行的SQL
MySQL 客户端与MySQL server建立连接后,就可以执行SQL语句了。如何查看一个连接上是否正在执行SQL语句,或者连接是否处于空闲呢?下面我们做下测试。1.查看连接的空闲时间首先看下测试程序。代码中,每3s执行一条sql语句。//conn_idle_time.gopackage mainimport ( "database/sql" "...
2019-10-13 13:02:47 2447
原创 mysql timestamp为0值时,python读取后的对象为None
MySQL数据表中,如果timestamp类型的字段,值为0, python从数据库读取数据后,得到对象是什么类型,是否为None呢?下面来测试下。创建数据表首先创建数据表,其中字段pr_rule_update_time为timestamp类型,值为0.CREATE TABLE `orange_service` ( `id` int(11) NOT NULL AUTO_INCREMEN...
2019-10-13 11:14:18 899
原创 MySQL基础普及《MySQL管理之道:性能调优、高可用与监控》
最近工作的内容涉及MySQL运维内容,陆陆续续读了几本相关的书,其中一本是《MySQL管理之道:性能调优、高可用与监控》。内容涵盖性能调优(包括sql优化等)、备份、高可用,以及读写分离等,对于普及MySQL基础非常有用。记录一下,以便于后面查阅。附目录:1章 MariaDB架构与历史11.1 MariaDB的介绍 11.2 MariaDB和MySQL的兼容性 21.3 MariaDB...
2019-10-04 11:22:09 269
原创 读《大秦帝国》第三部
现在是2019年国庆假期,这两天终于把《大秦帝国》第三部读完了。从2017年7月份就已经开始读了,断断续续,中间停了很长时间,看其他书去了。今天总结一下书中的内容。第三部,各国之间继续攻伐。秦国这边开疆拓土,先后与楚国,与魏国,与赵国,都发生了攻城略地的战争。白起立下了赫赫战功。外交上,采用范睢的远交近攻方略,使山东各国不能联合。这期间,燕国和齐国发生了大规模战争,僵持五年有余,最后乐毅大...
2019-10-04 10:51:45 326
原创 golang mysql 如何设置最大连接数和最大空闲连接数
本文介绍golang 中连接MySQL时,如何设置最大连接数。文中例子连接MySQL用的package是github.com/go-sql-driver/mysql.设置最大连接数的接口是func (db *DB) SetMaxOpenConns(n int) 设置连接MySQL可以打开的最大连接数。如果n <= 0,表示打开的连接数没有限制。默认为0,也就是不限制连接数。另...
2019-10-02 23:27:41 6837 1
原创 如何查看MySQL connection id连接id
每个MySQL连接,都有一个连接ID,可以通过 connection_id()查看。连接id也可以通过以下方式查看:show processlist中id列information_schema.processlist的id列performance_schema.threads的processlist_id 列下面通过具体命令查看连接id。查看连接id:mysql> sele...
2019-10-01 22:26:34 5699
原创 golang 性能剖析pprof
作为一个golang coder,使用golang编写代码是基本的要求。能够写出代码,并能够熟悉程序执行过程中各方面的性能指标,则是更上一层楼。如果在程序出现性能问题的时候,可以快速定位和解决问题,那么写起代码来,会更加自信。本文介绍的pprof,是golang 自带性能剖析工具,可以帮助定位程序中可能存在的问题。1.引入pprof例子代码如下:package mainimport...
2019-09-21 16:25:17 2532
原创 排查python内存泄露中几个工具的使用
本文主要介绍3个工具:pdb,objgraph,以及pympler。1.pdbpdb是专门用于python代码调试,模仿gdb。使用pdb可以查看堆栈,打印变量等。这里介绍的是命令行下的pdb。命令行下使用pdb,代码侵入小,调试方便。本例中,python安装在当前目录下.venv使用pdb加载python程序.venv/bin/python -m pdb orange.py&...
2019-09-15 18:57:34 17706
原创 关于排查python内存泄露的简单总结
这次的内存泄露问题是发生在多线程场景下的。各种工具都试过了,gc,objgraph, pdb,pympler等,仍然没有找到问题所在。pdb感觉用起来很方便,可以调试代码,对原来的代码无侵入性。排查问题的过程中,多线程场景下,相关的工具,显得无力的。使用objgraph时,代码执行很长时间后,show_growth()显示没有新创建的对象。这个可能是因为objgraph只针对当前线程的上下...
2019-09-15 18:00:45 1252 1
原创 python内存泄露memory leak排查记录
问题描述A服务,是一个检测MGR集群主节点是否发生变化的服务,使用python语言实现的。针对每个集群,主线程会创建一个子线程,并由子线程去检测。子线程会频繁的创建和销毁。上线以后,由于经常会有功能发布,从而重启服务,开始一段时间没有发现问题。半个月前的周二服务发布后,大约一周时间,没有再发布。到周末的时候,突然告警系统负载高,经过排查,发现内存几乎耗尽,并查到是A服务占用巨大内存,没有释...
2019-09-08 18:37:43 3248 2
原创 域名到IP 报错socket.gaierror: [Errno 8] nodename nor servname provided, or not known
Python中如何通过域名,查看对应的IP?请看如下代码:import sockethostname="www.baidu.com"ip = socket.gethostbyname(hostname)print "ip:", ip看下执行结果:ip: 112.80.248.75如果配置的hostname有问题,或者说域名配置错误,就会出现如下报错:Traceback (...
2019-09-08 16:30:26 2568
原创 Orchestrator MySQL主库故障切换的几种类型
Orchestrator 对MySQL主库的故障切换分为自动切换和手动切换。手动切换又分为recover、force-master-failover、force-master-takeover以及graceful-master-takeover.1.自动切换自动切换是主库出现故障后,自动提升新主库,进行故的障切换。自动切换受到以下条件限制和约束:主库是downtime的集群不进行故障切...
2019-08-25 23:23:20 2187
原创 如何查找占用空间大的文件或目录
当发现系统磁盘空间满的时候,最想知道的就是哪些大文件把空间用完了。本文提供两种查找大文件的方法。1. 按照占用空间大小排序将目录下各个文件按照占用空间排序,这样可以很方便的得到占用空间最大的文件或目录。命令:du -sm /XXX/* | sort -nr以MB为单位计算占用空间,并按照占用空间进行排序。例如,du -sm /docker/opt/logs/logs/* | ...
2019-08-24 17:57:41 2673
原创 MySQL查看数据表的创建时间和最后修改时间
如何MySQL中一个数据表的创建时间和最后修改时间呢?可以通过查询information_schema.TABLES 表得到信息。例如mysql> SELECT * FROM `information_schema`.`TABLES` WHERE `information_schema`.`TABLES`.`TABLE_SCHEMA` = 'cmdb' AND `informatio...
2019-08-24 16:16:54 5557
原创 golang channel关闭后,是否可以读取剩余的数据
golang channel关闭后,其中剩余的数据,是可以继续读取的。请看下面的测试例子。创建一个带有缓冲的channel,向channel中发送数据,然后关闭channel,最后,从channel中读取数据,输出结果。package mainimport ( "fmt")func main(){ ch := make(chan int, 3)...
2019-08-03 21:13:29 17417 7
原创 python MySQLdb 如何设置读超时read_timeout
在python中,经常用到 MySQLdb操作MySQL数据库。在实现上,MySQLdb并不是纯python的,而是封装了MySQL C API库_mysql。对于MySQLdb是否支持read_timeout,其使用手册中对这个参数只字未提。所以,read_timeout是否真的可用,是存在疑惑的。stack overflow上面也有人问到同样的问题。接下来,我们从MySQLdb的源码库M...
2019-07-28 16:15:03 7134 2
原创 golang 开源项目: 配置解析模块--config
在golang中,配置文件经常使用json格式。json格式的语法,有些繁琐,尤其是出现嵌套的时候,每一块都需要大括号包裹,看起来很臃肿。本着简单易用的原则,个人开发了一个配置解析库kitty,已在github开源。下面介绍配置解析库kitty的语法和使用方法。基本语法基本字符定义如下:# 注释= key=value, 赋值[] 区域,可以表示一个结构体[[]] 区域...
2019-07-21 16:12:22 1168
原创 奔跑吧
最近一段时间,感觉身体和精神状态不是很好。经过了一周的工作时间,疲劳是免不了的。到了周末,虽然睡觉可以缓解一定的劳累,但却发现越睡越累。这个时候,我意识到,我进入了一个不好的循环。不能让自己一直处于这种状态,要去改变。我试着去跑步,来一个五公里,挑战一下已经疲倦的身体,让汗水湿透全身,冲刷一下毛孔,感受着肌肉的轻微疼痛。一个字爽。跑完步,冲一个澡,整个人都精神了,做事情的效率也提升了...
2019-07-21 15:17:46 173
原创 读《异类》有感
前几天,读了《异类》这本书,借此记录几点感触。简单事物的背后隐藏着复杂,而复杂是由一个个条件累积成的,当一个个条件满足时,也就顺理成章,显而易见。伟大的人,看来生而伟大,而实际,与家庭环境,与教育培养,都有着密不可分的联系。强者迎接挑战,弱者害怕挑战。积少成多,汇小溪成江海,集跬步至千里。学习,贵在持之以恒。...
2019-07-13 10:51:17 422
原创 golang 通过reflect反射修改值
不是所有的反射值都可以修改。对于一个反射值是否可以修改,可以通过CanSet()进行检查。要修改值,必须满足:可以寻址, 可寻址的含义:slice的元素可寻址的数组的元素(指向数组的指针)可寻址的结构体的字段(指向结构体的指针)指针指向的具体元素不是结构体没有导出的字段1.指针指向的具体元素需要两步:取地址:v := reflect.ValueOf(&...
2019-07-09 21:02:02 9173
原创 golang 使用reflect反射结构体
"反射结构体"是指在程序执行时,遍历结构体中的字段以及方法。1.反射结构体下面使用一个简单的例子说明如何反射结构体。定义一个结构体,包括3个字段,以及一个方法。通过reflect包,首先查看这个结构体对应的动态类型reflect.Type和动态值reflect.Value,并查看这个结构体对应的基本类型。接着查看结构体的字段数量,并遍历每个字段。打印每个字段的类型、值、以及tag标签。...
2019-07-06 18:35:06 3288
原创 golang reflect 简单使用举例
golang中的多态,主要由接口interface体现。接口interface在实现上,包括两部分:动态类型和动态值。golang提供的reflect包可以用来查看这两部分。动态类型func TypeOf(i interface{}) Type返回i的动态类型。动态值func ValueOf(i interface{}) Value返回i存放的动态值。下面举例说明。pack...
2019-07-03 21:00:34 346
原创 golang defer那些坑
defer以下几个特性,使用时需要关注下。即时的参数传递调用os.Exit()时defer不会被执行defer与return的先后顺序1.即时的参数传递定义defer时传入的参数,是作为拷贝传递的。也就是说,如果原来的变量值发生变化,不会影响传给defer的参数。例子如下:package mainimport ( "fmt")func main(){...
2019-06-23 20:49:06 1255
原创 golang defer 延后执行什么
对于golang的defer,我们已经知道,defer定义的语句可以延后到函数返回时执行。经常用在文件的关闭,锁的释放等场景中。而且defer定义的语句即使遇到panic也会执行。这样,可以执行必要的清理工作,甚至使用recover()捕获异常。以前使用defer经常这样用:defer close()或者defer func(){ //do something...}()...
2019-06-18 19:06:22 362
原创 查看进程CPU、内存使用情况
本文介绍通过ps和top查看进程的cpu、内存等使用情况。1.ps命令1.1 概览ps命令相关参数定义:-e 或者-A,选择所有的进程;-L 显示线程;-o 自定义输出格式;输出格式:C cpu使用百分比,为”使用的CPU时间/进程启动到现在的时间”STIME 启动时间,小于24小时,格式为”HH:MM”,否则为“mmm dd”为 month dayTIME 累计使用...
2019-06-08 16:14:43 5435
原创 linux如何查看目录或文件夹的总大小--du命令
记录一下如何查看一个目录或文件夹的总大小。使用du命令的选项-s,可以统计整个目录或文件夹的大小。例如du -sk ./156k
2019-06-08 15:55:01 9278 1
原创 git 常用的分支技巧
分支branch作为git一个强大功能,在平时开发如果能够善加使用,定能成倍提升开发效率。1.分支开发模式主分支master上一般是稳定版本,需要保证随时都能发布。所以,可以建立一个开发分支用于开发新功能。git branch dev查看有哪些分支git branch -a* dev master bugfix-1 remotes/origin/HEAD -> o...
2019-06-07 18:55:14 390
原创 golang tcp keepalive实践
前文中已经介绍了TCP keep alive的做了详尽说明,本文结合golang,介绍如何使用TCP keep alive。目前golang net包不提供TCP keep alive 开始探测时间、 探测总次数直接设置。使用第三方包,方便设置开始探测时间、探测时间间隔、探测总次数。1.下载第三方包git clone git@github.com:felixge/tcpkeepalive....
2019-05-26 22:39:46 4805
原创 TCP keepalive的详解(解惑)
TCP是面向连接的,一般情况,两端的应用程序可以通过发送和接收数据得知对端的存活。当两端的应用程序都没有数据发送和接收时,如何判断连接是否正常呢?这就是SO_KEEPALIVE的作用。1. SO_KEEPALIVE 的作用1.1 SO_KEEPALIVE的定义SO_KEEPALIVE用于开启或者关闭保活探测,默认情况下是关闭的。当SO_KEEPALIVE开启时,可以保持连接检测对方主机...
2019-05-26 17:49:39 31474
原创 勾践为什么卧薪尝胆
最近遭遇了各种挫折,开始思考未来的路如何走下去。想起了卧薪尝胆的故事,勾践为什么卧薪尝胆?听过很多豪言壮语,但随着时间一天天过去,意志一天天消磨,渐渐忘了当初的梦想。生活就像泥潭一样,一不留神,就会越陷越深,直到自己失去行动力。勾践用卧薪尝胆的方式,不断的提醒着自己,不要忘记自己所受的屈辱,不要忘记自己的誓言。反观现在的自己,温饱线上挣扎,却天天过的稀里糊涂,真是不应该。谨以此提醒自己...
2019-05-26 11:45:03 256
原创 专栏学习小结
去年在jksj上面,订阅了几个专栏,一直没有时间去学习。今年2、3月份,把专栏内容做成Kindle电子书,利用业余时间将其看完了。读过专栏以后,总结一下感觉:扩大了技术视野这些专栏,是一个技术导引,每个技术的具体学习,需要阅读相关书籍,需要结合实践去学习坚持学习。技术更新太快,要不断学习新东西。...
2019-05-26 10:40:19 151
原创 golang context学习记录1
1.前言一个请求,可能涉及多个API调用,多个goroutine,如何在多个API 之间,以及多个goroutine之间协作和传递信息,就是一个问题。比如一个网络请求Request,需要开启一些goroutine去访问后端资源(比如,数据库,RPC服务等),这些goroutine又可能会开启其他的goroutine,如何跟踪和控制这些goroutine呢?golang定义了 context包...
2019-05-19 18:15:31 420
git post-update
2017-07-30
Spreadsheet-ParseXLSX-0.16.tar.gz
2014-11-26
sqlite嵌入式编程实例
2012-06-20
Linux下sqlite3编程实例
2012-06-20
rt5370驱动
2012-03-20
ndiswrapper 最新版本下载 ndiswrapper-1.57.tar.gz
2012-03-07
Linux下使用USB转串口获取GPS数据
2012-03-01
深入理解linux内核 第三版 Daniel P. Bovet &Marco Cesati 勘误
2011-03-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人