Java 运行参数调整

JVM 在线上运行的时候,可以调整一些运行参数,查看参数帮助如下:

运行 java -h 可以看到 Java 运行可调整的参数。 运行 java -X 可以查看 Java 支持的额外参数。 注意一些参数的默认开启在 JDK6 和 JDK7 之间会有差异,甚至在 JDK7 的不同 update 也会有差异,运行 java -XX:+PrintFlagsFinal 查看默认的参数配置。

参考: Java HotSpot VM Options The most complete list of -XX options for Java JVM Tuning JVM Garbage Collection …

more ...

Redis 到底有多快[译文]

原文地址 http://redis.io/topics/benchmarks

拖了一个半月的稿子~


Redis 自带了一个叫 redis-benchmark 的工具来模拟 N 个客户端同时发出 M 个请求。 (类似于 Apache ab 程序)。你可以使用 redis-benchmark -h 来查看基准参数。

以下参数被支持:

    Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>]

     -h <hostname>      Server hostname (default 127.0.0.1)
     -p <port>          Server port (default …
more ...

从 SVN 到 Git,找回丢失的历史

前段时间在将公司的 SVN 项目迁移到 Git 上面去,遇到一个很少见的问题: 有一个小伙伴使用 git-svn 做 rename 操作时候,将一个目录 svn mv 了, 导致新目录只存了最近几个月提交历史,丢失了历史信息。对团队开发而言, 历史提交是非常宝贵的财产,我们想了一些办法,把这些数据提取出来。

# 找出丢失之前的版本,列出丢失目录上层的操作记录。
svn log -l 2000 svn://log4d.com/trunk/apps/ios/ | less

# 将重命名之前的版本拷贝到一个临时目录
svn copy svn://log4d.com/trunk/apps/ios/nami@43252 svn://log4d.com/trunk/apps …
more ...

Goodbye 2013, Hello 2014

2013 年末,我给自己制定了几个年度目标:

离梦想更近一步

找一个靠谱的姑娘,我感觉她需要我,我也需要她了

  1. 成为一个为百万用户级别提供技术支撑的人物,要能独当一面
  2. 帮助网站进行性能优化
  3. 制定规则,平衡猥琐实现和优雅
  4. 继续写博客,分享积累 + 翻译文章

关于感情

先来谈谈感情,我和她在一起一年半了,虽然偶尔有小摩擦,但总体上面还是非常幸福的。 找到一个能产生共鸣,生活兴趣相近,相互欣赏的人太难了。一定会珍惜的。

关于工作

再谈谈协作,相当艰辛的跨过了去年年末的痛苦挣扎,然后看待事物和进行平衡选择时候 就没那么痛苦了。我的一大问题就是,从小认为人或事都可以非黑即白,这种决定性的判断, 会让我在处理事情时候,失去对重心的控制,有可能花费大量时间在细枝末节的地方。 2013 年初时候,我甚至想一度放弃,而熬过来之后,工作就又变得非常开心, 现在可以包容别人的不同意见,尝试寻找相同共性(虽然处理的能力还不够)。

也许是因为从小不够出色,所以工作之后在自己擅长的领域,反而变得异常强势和绝对, 这一点近来控制的不错,但是还可以做的更好。

关于技术

技术方面 …

more ...

Linux 程序员的 Mac 安装记录

作为一个 Linux 的老用户,我再一次验证了那句老话「Linux 用户有钱就换 Mac」。 前段时间,托朋友从香港购入一台 rMBP,下面就是我的 Mac 使用安装记录。

Brew

Brew 是 Mac 下面的包管理工具,通过 Github 托管适合 Mac 的编译配置以及 Patch,可以方便的安装开发工具。

安装 Brew:

ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)"

我安装的 Brew 包:

brew install ack
brew install ansible
brew install …
more ...

Postfix 基本配置[译文]

原文地址:Postfix Basic Configuration 。 有少许编译。

介绍

Postfix 的配置文件 main.cf 有数百个配置参数, 幸运的是,所有参数都有合理的默认配置项。 大部分时候,只需要配置两三个参数即可。

安装 Postfix 的方法可以参见 安装方法

特殊场景用途的配置方式,如邮件中枢,防火墙,拨号环境客户端的说明可以在 标准配置说明 里面查看。

Postfix 配置语法

Postfix 的配置文件默认在 /etc/postfix。主力配置文件是 main.cfmaster.cf。用户权限必须是 root 的。

/etc/postfix/main.cf 配置语法有两个要点:不用引号,可以使用 $ 来引用参数。

# 定义一个参数
/etc …
more ...

在 Python 中使用 GDB 来调试[译文]

大约一年前,我接触了 Java 中的 Btrace 能够不停机查看线上 JVM 运行情况的特性让我艳羡不已。 另外还有强悍的 jStack 和 jConsole 来进行运行期侦测,JVM 的工业级强度果然不是盖的。

当时公司技术方面也遇到了一些瓶颈,一部分原因是 CPython 本身的 IO 模型问题, 另一方面也和早期代码写的极不工整脱不了关系。万般无奈之下,我们用 Jython 推翻重做了主要业务,效果立竿见影,但同时也把真实问题给规避掉了。

在这之后我们在 JVM 的领导下,走上了康庄大道。但我心中始终还有一个梗, 就是想对性能遇到瓶颈的 Python Process 进行线上侦测。 这篇文章就是开始的第一步。

PS:这篇文章理论上是可行的,但是在我机器(Ubuntu 12.04 / 系统自带 Python) 无法正常执行,会爆出 unable to …

more ...

15 分钟学会 R 语言[译文]

仗着自己有几门语言的基础,我在学新语言时候,都会选择一些快速入门教程。 比如 Learn X in Y minuts 就是我经常光顾的站点。

前段时间,小柒在用 R 写数据分析脚本,我就建议她把 Learn X in Y minuts 里面的 R 语言教程翻译出来。话说 Learn X in Y minuts 里面的中文贡献还是非常多的,赞。

Learn X in Y minuts 的源码托管在 Github。 小柒被我逼着把这篇 R 语言教程 翻译到 R 语言教程中文版

下面是译文,有不妥的地方可以留言或者直接去 Github 上面 Pull request …

more ...

读《大规模Web服务开发技术》

年前看了这本书《大规模Web服务开发技术》,当时给的评价是:

很好,让我这个渣渣看的很感动,数据翔实,经历可靠,翻译的也不错,我给 4.2 分

现在经历过 Python / Django / 烂代码的阵痛,开始有更多的想法, 在整理这些粗糙的想法之前,我又把这本书翻了一遍,写个流水帐读书笔记。

大规模Web服务开发技术

《大规模Web服务开发技术》@豆瓣: http://book.douban.com/subject/6758780/

规模

小规模 / 大规模 / 超大规模的侧重点各不相同:保持扩展性/保持冗余/低成本运维/开发合作方便

内存、磁盘、负载

内存快,磁盘慢,IO 速度的差异

数据分布式

  1. 使用局部分布式,热数据独立出来。
  2. Partition 分布式,按模块分割数据。
  3. 按 …
more ...

Arch,再见

Arch

Arch 是我真正使用的第一款 Linux 发行版,大约使用了三年, 现在的这个 VPS 跑的系统也是 Arch。 然而随着时间变化,我从最早的天天更新狂,到一周、一个月、三个月和不主动更新。 彻底从从不折腾会死星人变成了一个尽量避免变更的老用户。

Arch 很适合作为第二个(第一个是新手使用的 Ubuntu),它的哲学 KISS 非常优雅, Keep It Simple And Stupid。基于这原则,它将 Linux 内部的使用、运维细节都展现出来。 毫不夸张的说,被 Arch 折腾几年,就能胜任 Linux SA 的角色了(笑)。

可是这种深入带来的学习成本也很高,需要不停地跟着 Arch 社区的变化而变化。 每次更新之前需要先阅读官方升级指南,搞不好就升级给挂了。 而且 Arch 社区升级激进得有些可怕 …

more ...