golang sync Cond

Cond在Locker的基础上增加的一个消息通知的功能。但是它只能按照顺序去使一个goroutine解除阻塞。

Cond有三个方法:Wait,Signal,Broadcast。
Wait添加一个计数,也就是添加一个阻塞的goroutine。
Signal解除一个goroutine的阻塞,计数减一。
Broadcast接触所有wait goroutine的阻塞。 继续阅读

golang sync mutex

golang的多线程固然好用,但是有时候需要对数据进行上锁,防止数据被其它线程更改。那么sync包下的Mutex非常好用。

Mutex是一个互斥锁。可以作为struct的一部分,这样这个struct就会防止被多线程更改数据。
继续阅读

Change the MySql data default directory

注意:在操作之前,要先备份好数据库。
默认情况下,MySql的数据库文件位于/var/lib/mysql下。于是想着把现在的数据库文件移动到挂载的硬盘上。找了一些办法,例如一起移动socket,datadir等等。但是移动完成后不能启动。最终找到了一个很完美的方案。 继续阅读

祝所有的父母身体安康

最近总是感觉晚上睡觉有点凉,可能是被子太薄了。不过这个暖气确实是不太给力。这么大的屋子,才一组暖气片。有点少。突然想着要是在铺个电褥子,或许好些。正好周末是正月十六,十五上班回不去,十六回去也好。也好能吃上父母亲手做的汤圆。 继续阅读

too many open files

最近两天可以说与这个too many open files是较上劲了。前段时间,redis服务器出现这个错误,更改了服务器的ulimit的限制。最近go开发的API的服务器也是出现了同样的错误。整的很郁闷啊。不过总得来说,还是学到了很多知识。在此做一个总结。 继续阅读

go 服务器出现too many open files的错误

最近两天服务器总是会出现too many open files的错误。真的很是头疼。在本地开发环境中,也用了压力测试,发现问题不存在。但是为什么服务器会出现这种错误,有些闹不明白。本来想用ulimit更改一下打开文件的描述符。但这样子觉得并不解决问题。好吧,那就查一下更本的原因。 继续阅读

Redis too many open files error

最近公司的API总是莫名其妙的报告一些redis 打开文件太多的错误。今天老板终于下定决心,必须解决这个bug。经过测试,问题终于出现了。

原因是因为在linux下面ulimit命令限制了可以打开文件描述符的最大数量。默认是1024.而redis的最大连接数maxclients却远远大于这个数量。 继续阅读

Shell 反引号 `

shell脚本中的反引号“`”,这个符号通常在tab键的上面那个键,同时按住shift输入。在shell中反引号,可以讲命令的输出赋给变量。在shell编程中,很多时候,shell 命令的输出需要作为下面命令的参数。那这个反引号就会排上用场了。
这个例子很简单,就是按照年月日,创建文件夹。 继续阅读