tls 1.2 example

2019-12-29
阅读 15 分钟
2.9k
这篇blog类似Example Handshake Traces for TLS 1.3. 人肉trace/verify一个典型的TLS 1.2握手.因为hash值无法反推, 理解错误时很难debug. 读rfc文档的效率不如直接阅读代码. Finished消息之后的内容尚未验证完毕.

git tips

2019-12-09
阅读 2 分钟
1k
This option allows you to say that you expect the history you are updating is what you rebased and want to replace. If the remote ref still points at the commit you specified, you can be sure that no other people did anything to the ref. It is like taking a "lease" on the ref without explicitly l...

nginx dynamic resolve upstream servers

2019-11-19
阅读 5 分钟
9.1k
使用nginx时, upstream中若有server不可resolve. start/reload都会失败.当把nginx作为网关时, 可能有多个服务, 任意服务挂掉. 导致整个网关不可启动. 这明显是不合理的.

一个erlang nif野指针的追踪过程

2019-11-19
阅读 12 分钟
3.9k
概述 最近半年, 经常出现一些奇怪的bug. CPU非常高, 但etop并没有red特别高的进程. 内存占用非常高, 和etop看到的内存不吻合. coredump. 因为erlang层面无法定位问题, 那问题只能在c了. BUG现场 cpu %100 ErtsRunQueue被写坏 {代码...} {代码...} AOFF_RBTree_t被写坏. rb_tree存在环. {代码...} {代码...} memory leak ...

4.15.0-1034-gcp内核TCP SACK BUG导致的请求无返回

2019-11-02
阅读 6 分钟
2.5k
某天更新发现某服务收到请求但客户端无法收到返回。幸运的是,客户端同学能在测试环境重现问题。2分法找到首个故障版本并进行了回退。故障版本仅仅修改了snd_buf,理论上不应导致该问题。

一个很有意思的内存泄漏bug.

2019-10-20
阅读 8 分钟
3.2k
bug回顾 bug_fix 时间线 x月x日 10:00 x_service 内存开始快速上涨 x月x日 10:18 用户报告x_service内存飞速上涨. x月x日 10:20 平台mongodb因内存不足重启 x月x日 10:22 重启x_service x月x日 11:00 x_service内存再次快速上涨 x月x日 14:45 回滚x_service并再次更新, x_service服务恢复正常. x月x日 19:48 定位到是Enu...

elixir/erlang内存泄漏排查.

2019-10-20
阅读 9 分钟
4.5k
对服务端程序来说, 内存泄漏是经常会面临的问题. 使用erlang的情况下, 不用程序员手动管理内存. 如果不写c driver, 一般的内存问题还是很容易定位的. 这篇blog对常见的内存泄漏类型, 排查手段做个小结.

docker container logrotate不生效问题

2019-10-20
阅读 3 分钟
5.1k
给syslog docker增加了日志分析脚本. 脚本会使用最短编辑距离算法, 归集错误日志, 发送到测试环境报警群. 该脚本依赖logrotate.第二天一早没有看到预期的错误归集报警. 发现logrotate不工作了.

谈谈erlang的timeout.

2019-10-01
阅读 2 分钟
3.5k
gen_server call timeout erlang的gen_server call默认有超时, 若在指定的超时内没有收到返回. 则会exit(timeout). gen_server call gen.erl:160 {代码...} 什么时候应该捕获timeout? 显然, 如果等待一段时间后, 没有收到消息, 有两种可能. 对端未能返回消息. 对端返回了消息. 但调用端尚未收到. catch timeout异常和处...

elixir基准测试记录

2019-07-29
阅读 5 分钟
2.1k
elixir基准测试 代码见elixir_basic_benchmark 测试变量 {代码...} 总表 操作 耗时 10 members lists ++ 100 members lists 0.02μs 100w process dict get/put/delete 0.03μs map get 0.03μs map put/delete 0.05μs 100w ets set/bag/duplicate_bag read 0.1μs 100 members lists ++ 10 members lists 0.02μs 100w ets o...

when erlang gen-server's terminate is call

2019-06-25
阅读 3 分钟
2.5k
GenServer的terminate callback在进程退出时会被调用. 但若没有:erlang.process_flag(:trap_exit, true), 进程可能被悄无声息地kill掉, 而不走terminate回调.

RFC6749 Oauth2.0 四种授权模式

2019-06-23
阅读 4 分钟
2.7k
关键是,OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。从而资源所有者(用户)的credentials,主要是密码,不会暴露给客户端。

在vscode中设置PYTHONPATH

2019-05-15
阅读 1 分钟
15.7k
In VS Code, PYTHONPATH affects debugging, linting, IntelliSense, unit testing, and any other operation that depends on Python resolving modules. For example, suppose you have source code in a src folder and tests in a tests folder. When running tests, however, they can't normally access modules i...

拆分umbrella project遇到的deps编译env为prod问题

2019-05-07
阅读 2 分钟
1.6k
此前代码放在一个repo下, 代码重用的方式是umbrella. 为了将代码拆分, 让服务间的边界更明显, 我们将elixir project拆分开, 以deps方式重用代码. 遇到了deps编译时默认env为prod问题.

OverflowError: string longer than 2147483647 bytes 问题

2019-04-25
阅读 5 分钟
5.4k
requests 2.21.0 requests-toolbelt 0.9.1 使用python requests上传文件时, 报OverflowError: string longer than 2147483647 bytes 错误.

linux keepalive探测对应用层socket api的影响

2019-04-18
阅读 7 分钟
4.9k
大部分人都知道tcp的keepalive. 假设读者知道keepalive会如何触发. 这篇文章想讨论keepalive触发后, 对socket使用者的影响.

用cAdvisor InfluxDB Grafana监控docker容器的TcpState

2019-04-17
阅读 3 分钟
4.4k
容易搜索到, 因为cadvisor的高cpu占用, 需要--disable_metrics=""[链接]实际上并非如此. 不带任何参数情况下, 本地启动cadvisor.~/gopath/src/github.com/google/cadvisor(master*) » sudo ./cadvisor -logtostderr 在浏览器中打开 [链接]:8080/containers/ 可以看到response中, 带有TcpState.

erlang Cannot get connection id for node bug

2019-04-11
阅读 2 分钟
5k
bug 描述 ping 同样sname, 使用ip作为hostname, 会使vm崩溃. {代码...}

poolboy max_overflow 参数坑

2019-03-06
阅读 3 分钟
3.3k
某个服务节点在较低的qps(每秒2000次数据库访问)下, 在worker进程数100, max_overflow进程数100的情况下. 突然性能下降, 每秒只能处理1500次数据库访问. 导致请求处理延时从几MS上升至几百MS, 之后又逐渐恢复.

docker swarm mode 下容器重启IP改变引发的 CLOSE_WAIT 问题

2019-02-22
阅读 2 分钟
4.8k
如下图. server docker restart后, client端写入的日志丢失, 并且无报错.因为不支持时序图, 把时序图代码嵌入在代码里.

inside gen_server call

2019-01-12
阅读 10 分钟
2.6k
前段时间的两个工作.一个是entity集群库, 可以通过entity_id调用任意节点上的entity. 一个是名字服务, 可以为一系列pid注册名字, 并可以以这些名字调用对应的pid.都会遇到同一些问题: 当我们使用GenServer.call/2时, 发生了什么, 会有什么异常情况发生? 哪些异常应该捕获? 以什么样的方式处理这些异常/错误?当call的pid...

gen_tcp参数总结

2019-01-12
阅读 7 分钟
4.3k
在用elixir 写 rpc server/client时, 需要对传入gen_tcp的参数做一些考量. 如, 部分参数应该允许用户修改, 比如sndbuf recbuf, 让用户根据使用场景调节, 部分参数应该屏蔽, 减少使用理解成本.故, 深挖了一下gen_tcp的option

Socket Error 104 bug

2019-01-12
阅读 5 分钟
3.4k
bug概述 技术栈 nginx uwsgi bottle 错误详情 报警机器人经常有如下警告: {代码...} debug过程 确定报错位置 有日志就很好办, 首先看日志在哪里打的. 从三个地方入手. 我们自己的代码 没有. uwsgi的代码 root@660ece0ebaad:/# uwsgi --version2.0.14从github上co下来, 没有. python library的代码 在容器中执行 {代码......

如何对用户密码进行加密

2017-12-14
阅读 2 分钟
3.1k
1.交给https,明文传输。2.客户端将密码加盐(盐随机生成、具有强度)并哈希。服务端再次加盐哈希并对比。假设https被窃听,攻击者破解密码明文也具有相当难度。