一例 Timeout 故障

Thumbnail

早晨刚到公司, HAProxy 报警,Trtornis(第三方云存储网关,用来统一管理阿里云和七牛云的对象存储) 全飘红。 检查日志,并没有 ERROR 信息,但是大量 WARN 报错。 WARN [2015-12-09 11:01:02,730] org.eclipse.jetty.util.thread.QueuedThreadPool: dw{STARTED,8<=50<=50,i=0,q=1024} rejected org.eclipse.jetty.io.AbstractConne ction$2@62c021c6 WARN [2015-12-09 11:01:02,731] org.eclipse.jetty.io.SelectorManager: Could not process key for channel java.nio.channels.SocketChannel[connected local=/10. 1.1.78:8350 remote=/10.1.1.74:63290] ! java.util.concurrent.RejectedExecutionException: org.eclipse.jetty.io.AbstractConnection$2@62c021c6 ! at org.eclipse.jetty.util.thread.QueuedThreadPool.execute(QueuedThreadPool.java:362) [tritonis-shaded.jar:0.0.1-SNAPSHOT] ! at org.eclipse.jetty.io.AbstractConnection$FillingState.onEnter(AbstractConnection.java:379) ~[tritonis-shaded.jar:0.0.1-SNAPSHOT] ! at org.eclipse.jetty.io.AbstractConnection.next(AbstractConnection.java:273) ~[tritonis-shaded.jar:0.0.1-SNAPSHOT] ! at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:563) ~[tritonis-shaded.jar:0.0.1-SNAPSHOT] ! at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:82) ~[tritonis-shaded.jar:0.0.1-SNAPSHOT] ! at org.eclipse.jetty.io.SelectChannelEndPoint.onSelected(SelectChannelEndPoint.java:109) ~[tritonis-shaded.jar:0.0.1-SNAPSHOT] ! at org.eclipse.jetty.io.SelectorManager$ManagedSelector.processKey(SelectorManager.java:636) [tritonis-shaded.jar:0.0.1-SNAPSHOT] ! at org.eclipse.jetty.io.SelectorManager$ManagedSelector.select(SelectorManager.java:607) [tritonis-shaded.jar:0.0.1-SNAPSHOT] ! at org.eclipse.jetty.io.SelectorManager$ManagedSelector.run(SelectorManager.java:545) [tritonis-shaded.jar:0.0.1-SNAPSHOT] ! at org.eclipse.jetty.util.thread.NonBlockingThread.run(NonBlockingThread.java:52) [tritonis-shaded.jar:0.0.1-SNAPSHOT] ! at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) [tritonis-shaded.jar:0.0.1-SNAPSHOT] ! at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) [tritonis-shaded.jar:0.0.1-SNAPSHOT] ! at java.lang.Thread.run(Thread.java:745) [na:1.8.0_51] 这是七牛 API 调用出现问题,通过应用 Metrics API 检查 Threads: http http://A-DOMAIN:8351/threads | sort | uniq -c | sort -gr G qiniu 正常的实例: 异常的实例: 确认是七牛服务慢导致现成爆掉,但是 46 这个值来自于哪里? ...

2016-02-02 · alswl

一次艰难的 Wiki 升级

Thumbnail

公司使用 Confluence 管理自己的知识库, 现在使用的版本还是 3.0.1,而最新的 Confluence 版本已经是 5.4+。 新版本加入的一些现代化 Web 系统的新特性很吸引人(拖拽上传,可见即所得编辑), 在群众的强烈呼声下,我着手开始升级。 官方的升级路线很扯,3.0.1 的升级路线是: 3.0.1 -> 3.5.17 5.0.3 -> 5.4.4 中间两次大版本升级,第一次原因不明,第二次是更新了 markup 渲染引擎, 改为 HTML 格式类型的渲染模式。 由于一些原因,我们系统还跑在 embedded 模式下(其实就是 HyperSQL),这种大版本升级, 需要先从内置库升级到外部数据库,比如 MySQL。 ...

2016-01-12 · alswl

SS with Haproxy

Thumbnail

以前用自己的 SS,Linode 美国,后来 Linode 日本,但是始终拼不过上海电信的国际带宽。 经常不稳定,丢一半的包。 于是买了 SS 服务, 9 台服务器,自己挑觉得速度快的服务器。 但一直固定某台服务器也会偶尔出问题,导致邮件出不来,网页打不开。 需要手动切换一下服务器。 于是用 HA 做了一个本地代理,调整了一些参数,让 SS 总是有快速的服务器供选择。 结构: +-----------------+ +----------------+ | | | | | Server 1 |>>>>v >>| Mail.app | | | v ^ | | +-----------------+ v ^ +----------------+ v ^ +-----------------+ v |----------------+ +------------+ ^ +----------------+ | | v | | | | ^ | | | Server 2 |>>>>>>>>>| HAProxy |>>>>>>| SS-Client |>>>| Browser | | | ^ | | | | v | | +-----------------+ ^ +----------------+ +------------+ v +----------------+ ^ v +-----------------+ ^ v +----------------+ | | ^ v | | | Server 3 |>>>>^ v>| Evernote... | | | | | +-----------------+ +----------------+ 配置: ...

2015-11-27 · alswl

几步拥有一个安全密码

Thumbnail

给团队非开发同学写的邮件,对其他人也有些意义,遂贴出来。 这个互联网越来越不安全 https://www.baidu.com/s?wd=%E5%AF%86%E7%A0%81%E6%B3%84%E9%9C%B2%E4%BA%8B%E4%BB%B6。密码数据库泄露,黑客暴库攻击,社会工程学攻击层出不穷。我给大家介绍几个小方法,轻松提高自己各类密码的安全等级。 先给个地址,大家可以测试一下自己常用密码的复杂度:https://howsecureismypassword.net/ 认为自己电脑水平还可以的,请直接翻到文章最后。 如何管理密码 给普通用户的建议: 密码设置复杂一些,不要使用生日、日期、姓名等有意义的信息 使用一套合理的密码生成策略 重点来了,密码生成策略: 选择自己喜欢的诗词或者某句话,比如「床前明月光,疑是地上霜」,取其拼音的第一个字母 cqmygysdss 将每个句子第一个单词大写,cqmygysdss -> CqmygYsdss 加上对应网站的信息,比如 163:CqmygYsdss163,qq: CqmygYsdssqq 大功告成,你的密码安全级别提升了。 ...

2015-10-28 · alswl

怎么打日志

Thumbnail

需要解决的问题: 业务日志打太乱,没有位置和格式约束 什么情况打日志,如何避免滥用,提高日志作用 打日志最佳实践 Dropwizard 列出的打日志原则: Be human readable. Be machine parsable. Be easy for sleepy ops folks to figure out why things are pear-shaped at 3:30AM using standard UNIXy tools like tail and grep. eg.: TRACE [2010-04-06 06:42:35,271] com.example.dw.Thing: Contemplating doing a thing. DEBUG [2010-04-06 06:42:35,274] com.example.dw.Thing: About to do a thing. INFO [2010-04-06 06:42:35,274] com.example.dw.Thing: Doing a thing WARN [2010-04-06 06:42:35,275] com.example.dw.Thing: Doing a thing ERROR [2010-04-06 06:42:35,275] com.example.dw.Thing: This may get ugly. ! java.lang.RuntimeException: oh noes! ! at com.example.dw.Thing.run(Thing.java:16) ! splunk 的最佳实践: 使用清晰的键值对:key1=val1, key2=val2 对开发者易读 全部添加时间戳 使用唯一标记,比如 user_id, transaction_id 使用文本 使用开发者易用格式,比如 JSON 尽可能多加一下数据 标记调用来源,比如方法名,类名 将多行事件拆分 除了一些浅显易懂的原则,还是 dropwizard 的三条原则和解决方案靠谱。 但是两篇文章都没有告诉如果在复杂系统里面记录有用的日志,打日志生命周期是怎样的。 既然找不到,我就就自行想想如何打有意义的日志。 日志不怕多,而是怕繁杂难搜索,产出的数据无意义难追踪问题。所以最关键是找到一个合理通用的方式组织起来即可: 按照模块名 com.duitang.service.module.aaa 打日志,比如 com.duitang.service.module.aaa.log 一个模块一个日志,模块复杂之后,可以拆分,com.duitang.service.module.aaa.core.log / com.duitang.service.module.aaa.query.log,其实在这个时侯,这个模块本身由于复杂性也会面临拆分。 不分离 error / info 日志,放到一个文件,通过 grep 或者日志工具分离 日志文件一定要 rotate,磁盘存储固定时间 N 天,远程文件存储固定时间 M 天,TTL 删除。 补充一个日志常见使用场景: 外部资源调用 状态变化 系统入口和出口 业务异常 非预期执行 参考文档: ...

2015-10-18 · alswl

Redis 集群扩容

几乎每一个网站都需要用户登录状态系统,其中核心是存储 Session 的用户登录状态存储系统。 主流的实现之一是使用 Redis 存储用户登录信息,Redis 特点是功能简单、无依赖、 存储结构丰富、有持久化功能。 我大堆糖的 Session 存储系统也正是基于 Redis。 可是 Redis 也存在一些问题,比如 Redis 自身没有 Sharding 功能,Replication 也是在逐步完善完善过程中 (2.4 支持 Replication,2.8 加入 Replication partial resynchronization 功能)。 纵观当下流行的 DB 系统,哪个不是自带这两个特性,这两个分布式特性应该成为新出产的 DB 系统的标配。 而且作者还经常发布延期,放烟雾弹,不知道 Redis 自带 Sharding 特性要等到何年马月。 ...

2015-07-26 · alswl

带理想的执行者 - 柳比歇夫的一生

Thumbnail

作为战斗民族的俄罗斯民族,不但能在热带风暴级的灿鸿中进行正常起降, 历来也盛产各种奇葩人物。 最近我有看到一本描述一个科学家的如何生活的书,叫「奇特的一生」。 让人拍案称奇。 主人公是一位名叫柳比歇夫的科学家,想必他在「回首往事时候没有因为虚度年华而悔恨」, 因为他将自己的一生都精确的奉献到分类学、地蚤研究上面。 他的工作投入,不是单纯激情洋溢投入,而是精确到分钟级别的投入, 是奉献完整一生的投入。 除了学术上面的成功,他的时间记录法也很牛逼,甚至让苏联科学院进行研究。怎么描述他的牛逼呢?如果他生活在今天,大致会这样写: ...

2015-07-12 · alswl

2015 沪港 Hackathon

Thumbnail

我想参加黑客马拉松很久了,去年就观战过 2014 沪港黑客马拉松。 但苦于需要连续两天时间,一直没有下定决心参加。 上周末本来安排了两天的团队会议,后来临时取消, 给了我充足的时间。于是我在 27 号周五下午,报名参加了 27 号晚上开始的 2015 沪港 Hackathon。 独自作战的我,在现场寻觅了几个小伙伴组了一个队伍,其中有 小草 / tevin / 女王 / Doris / n1k0。 小草负责树莓派服务端,tevin 负责传感器取数据,我……负责前端游戏逻辑,哈哈哈,我已经三年没有写前端代码了,为了团队职责分工,只能赶鸭子上架了。 ...

2015-04-04 · alswl

读《遇见未知的自己》

Thumbnail

「遇到未知的自己」这本书讲的是如何来认识自己,理解自己的情绪,和自己内心沟通。 豆瓣链接 / Kindle 版本购买链接 下面我写的倒不是什么读后感,而是我自己去解决自己焦虑和压力的一个探寻过程,希望对你有帮助。 不完美 最近一年来,我生活和工作状态持续处于亚健康状态。表现出来的状况是:工作上对产出的成绩不满意, 对自己不够自信,追寻的目标(创业)变得模糊和不可量化;生活受到影响,开始陷入到哪里去的困惑。 很久没有兴奋的迎着早晨第一缕阳光蹦着下楼梯,人变得焦虑和烦躁。 ...

2015-03-14 · alswl

2014 惑

上周刚做完了自己的 2014 工作 Review,其中最大的挑战就是工作职能的变化: 由一个开发工程师变成一个团队的 Leader。 3 月份开始带领功能线小组,11 月份带性能线小组,将近一年的时间, 业绩结果只能用四个字来描述 不尽人意 从小的坏毛病:延迟、思考浅薄、计划能力差、犹豫不决被一一放大, 给管理团队带来很大的问题。 同时一个更大的问题出现了,曾经我将目标设定为成为一个优秀的产品工程师, 现在我已经站在这个位置上,下一步的目标(创业)离我还太远,导致驱动力出现了问题。 ...

2015-01-25 · alswl