xiezhenye.com
生活 | 神仙的仙居
http://xiezhenye.com/category/life
例 五位数一 57429 五位数二 24957 相减得 32472. 心中记住 7 余下的告诉表演者 3242. 表演者 3 2 4 2 11 1 1 2 9 2 7 既对方心中记住的那个数了. 稍微扩展一下,如果一个整数整除 9 的余数是r,当且仅当它的各位数的和整除 9 的余数是也是r。 8230;… = Σ(10. 8230;… = Σd. 1) – (2) 得. N – 9k – r = Σ( 10. 8211; 1) d. N = Σ( 10. 8211; 1) d. 8211; 1 = (10 – 1)(10. N = 9 (Σ(10. K) r 即 n 整除 9 的余数是 r. 8230;… = Σ(10. 9k r = Σd. 8211; 1) d. 8211; 1) d. R = 9k 9 Σ(10. 即 Σdi 整除 9 的余数是 r。 去掉一个数字后,各位数的和为 9k – d,整除 9 的余数是 9 – d。 各位数的和为 9k (9 – d). 各位数的和的各位数的和整除 9 的余数也是 9 – d。 最终的结果整除 9 的余数也是 9 – d。 Proudly powered...
xiezhenye.com
尝试让 cgo 调用绕过线程池 | 神仙的仙居
http://xiezhenye.com/2015/05/尝试让-cgo-调用绕过线程池.html
Go 语言中,可以通过 cgo 来调用 C 库。 但是由于 goroutine 的机制,外部的 C 函数调用可能能够很快返回,也可能执行很长时间。 为了 goroutine 调度不被阻塞,就一律对每个 cgo 调用都从线程池中取一个线程来执行,完成后再返回原 goroutine。 所以 go 的很多库在实现时,都没有通过包装 C 库,而是选择完全用 go 来实现。 这就使得 go 少了大量现有的 C 库可以利用。 读过 go 的代码后发现,要让 cgo 调用不通过线程池调用并不算麻烦,所以就自己修改了一下 cgo 命令。 Package cgo / / int add(int a, int b) { / int ret = a b; / return ret; / } / import "C" func CAdd(a, b int) int { return int(C.add(C.int(a), C.int(b) ) } func AsmCAdd(a, b int) int { return int(c.add(C.int(a), C.int(b) ) }. Cadd 是传统的 cgo 调用方式。
xiezhenye.com
禁用 MYISAM 引擎的 MySQL 插件 | 神仙的仙居
http://xiezhenye.com/2013/11/禁用-myisam-引擎的-mysql-插件.html
禁用 MYISAM 引擎的 MySQL 插件. 在无法控制最终用户使用 MySQL 时,就可能出现混合使用 InnoDB 和 MYISAM 的情况。 同时由于 MYISAM 引擎的稳定性问题,为了减少运维工作,通常也不希望用户去使用 MYISAM 引擎。 但是 MYISAM 引擎被 MySQL 系统表使用,还可能用于内部临时表,所以不可能直接禁用,因此 mysqld 也没有 –skip-myisam 这样的参数。 其实这个插件很简单,只是替换了 MYISAM 引擎的 create 入口,改为返回一个包装过的,替换了 create 方法的 ha myisam 对象。 Mysql CREATE TABLE `test4` ( `id` int(11) AUTO INCREMENT, `value` varchar(30), PRIMARY KEY (`id`) ) ENGINE=MyISAM; ERROR 1030 (HY000): Got error 1 from storage engine. This entry was posted in 技术. Leave a Reply Cancel reply.
xiezhenye.com
技术 | 神仙的仙居
http://xiezhenye.com/category/tech
Linux 平台上,对于多数 C/C 编写的应用,可以通过 perf 来方便的采样,还可以进一步生成火焰图来更直观地观察。 Java 是没法直接用 perf 的。 不过 JDK 自己其实已经带了一个采样工具 FlightRecorder ,算是 JMC 的一部分。 XX: UnlockCommercialFeatures -XX: FlightRecorder -XX:FlightRecorderOptions=loglevel=info. Sudo -u java user -i jcmd pid JFR.start filename=/tmp/app.jfr duration=60s. Sudo -u java user -i jcmd pid JFR.check. 更详细的用法可以参考官方文档 https:/ docs.oracle.com/javacomponents/jmc-5-4/jfr-runtime-guide/toc.htm. 确认完成后,就可以把 jfr 文件传回本地,用 jmc 来分析了。 This entry was posted in 技术. 于是去看了一下内核 connect...
xiezhenye.com
修复 disable myisam 插件的 crash 问题 | 神仙的仙居
http://xiezhenye.com/2015/07/修复-disable-myisam-插件的-crash-问题.html
修复 disable myisam 插件的 crash 问题. 之前写了一个 禁止创建 MyISAM 表的插件. 有报 issue,在 MySQL 重启后 uninstall plugin 会引发 crash。 挂上 gdb 后,backstace 如下. Gdb) bt #0 0x00000000006f7658 in column bitmaps set (write set arg=0x189ad98, read set arg=0x189ad98, this=0x7fc3a800fa60) at /root/mysql-5.6.24-tp/sql/table.h:1228 #1 use all columns (this=0x7fc3a800fa60) at /root/mysql-5.6.24-tp/sql/table.h:1238 #2 mysql uninstall plugin (thd=thd@entry=0x1d1b030, name=0x1d1d858) at /root/mysql-5.6.24-tp/sql/sql...At /root/mysql-5.6.24...Handl...
xiezhenye.com
移植 spider 到 MySQL 5.6 | 神仙的仙居
http://xiezhenye.com/2015/08/移植-spider-到-mysql-5-6.html
移植 spider 到 MySQL 5.6. MariaDB 中自带了很多 MySQL 中没有的插件。 这个引擎可以让 MySQL 作为一个 proxy ,来实现 sharding、高可用等功能。 由于 MariaDB 从 MySQL 5.5 时代就分道扬镳了,做过很多改动后,和目前版本的 MySQL 已经有了不小差异,所以插件基本上没法直接拿到 MySQL 里编译使用。 我就花了点功夫,把 spider 引擎移植到了 MySQL 5.6。 Cp -r src /path/to/mysql-src/storage/spider cd /path/to/mysql-src cmake . -DBUILD CONFIG=mysql release -DCMAKE INSTALL PREFIX= mysql install dir cd storage/spider make make install. 之后,执行附带的 install spider.sql 安装插件,创建所需要的系统表。 具体文档参见 https:/ mariadb.com/kb/en/mariadb/spider/.
xiezhenye.com
旅行 | 神仙的仙居
http://xiezhenye.com/category/traval
This entry was posted in 拍照. This entry was posted in 旅行. This entry was posted in 旅行. This entry was posted in 旅行. 第二天一早坐车回成都,结果又在半路上从 9 点多堵到下午 5 点那么多时间只好看看书,四处逛逛,从路边摆摊的藏民那里买东西吃。 This entry was posted in 旅行. 坐了 14 个小时车才到达沟口的漳扎镇,其中因为修路堵了 4 个小时,到了已经晚上10点多。 This entry was posted in 旅行. This entry was posted in 旅行. This entry was posted in 旅行. This entry was posted in 旅行. This entry was posted in 旅行. 跟我一起云计算 5 Shards 点滴记忆. On MongoDB Sharding 机制分析. On 找到 mysql 数据库中的不良索引. On 找到 mysql 数据库中的不良索引.
xiezhenye.com
go | 神仙的仙居
http://xiezhenye.com/tag/go
Go 语言中,可以通过 cgo 来调用 C 库。 但是由于 goroutine 的机制,外部的 C 函数调用可能能够很快返回,也可能执行很长时间。 为了 goroutine 调度不被阻塞,就一律对每个 cgo 调用都从线程池中取一个线程来执行,完成后再返回原 goroutine。 所以 go 的很多库在实现时,都没有通过包装 C 库,而是选择完全用 go 来实现。 这就使得 go 少了大量现有的 C 库可以利用。 读过 go 的代码后发现,要让 cgo 调用不通过线程池调用并不算麻烦,所以就自己修改了一下 cgo 命令。 Package cgo / / int add(int a, int b) { / int ret = a b; / return ret; / } / import "C" func CAdd(a, b int) int { return int(C.add(C.int(a), C.int(b) ) } func AsmCAdd(a, b int) int { return int(c.add(C.int(a), C.int(b) ) }. Cadd 是传统的 cgo 调用方式。
xiezhenye.com
获取 MySQL 崩溃时的 core file | 神仙的仙居
http://xiezhenye.com/2015/05/获取-mysql-崩溃时的-core-file.html
获取 MySQL 崩溃时的 core file. 对于一般进程,要让进程崩溃时能生成 core file 用于调试,只需要设置 rlimit 的 core file size 0 即可。 比如,用在 ulimit -c unlimited 时启动程序。 对 MySQL 来说,由于 core file 中会包含表空间的数据,所以默认情况下为了安全,mysqld 捕获了 SEGV 等信号,崩溃时并不会生成 core file,需要在 my.cnf 或启动参数中加上 core-file。 但是即使做到了以上两点,在 mysqld crash 时还是可能无法 core dump。 Echo 2 /proc/sys/fs/suid dumpable chmod 0777 /var/crash echo /var/crash/core /proc/sys/kernel/core pattern echo 1 /proc/sys/kernel/core uses pid. 由于 mysql 通常会以 suid 方式启动,所以需要打开 suid dumpable。 This entry was posted in 技术.
xiezhenye.com
corosync | 神仙的仙居
http://xiezhenye.com/tag/corosync
自定义 Pacemaker OCF 资源. Pacemaker / Corosync 是 Linux 下一组常用的高可用集群系统。 Pacemaker 的资源主要有两类,即 LSB 和 OCF。 其中 LSB 即 Linux 标准服务,通常就是 /etc/init.d 目录下那些脚本。 Crm ra list lsb. 另一类 OCF 实际上是对 LSB 服务的扩展,增加了一些高可用集群管理的功能如故障监控等和更多的元信息。 Crm ra list ocf. 要让 pacemaker 可以很好的对服务进行高可用保障就得实现一个 OCF 资源。 Pacemaker 自带的资源管理程序都在 /usr/lib/ocf/resource.d 下。 Crm ra meta test. 和其他的资源一样,这个 test 资源也会接受若干的参数,以及对 start、stop 等命令有超时默认值等。 X "$SERVICE PATH" ] ; then ocf log err "service path is not found" exit $OCF ERR CONFIGURED fi if [! X "$PROBE ...