1229 - 彻底搞定了服务问题

问题表现:

  • 基于 Swift + Ubuntu + Vapor 的服务经常崩溃

解决办法:

  • 调试:使用 gdb 分析 core dump,找到崩溃的代码地址。
  • 原因:是 AES256CBC.swift 在调用 Linux 进程时,「偶尔」会导致 libswiftCore.so 崩溃。
  • 办法:替换生成随机数的方式,最后使用的是:
1
2
3
4
5
6
7
8
class func generate(_ upperBound: UInt32 = UInt32.max) -> UInt32 {
#if os(Linux)
srandom(UInt32(clock()))
return UInt32(random()) % upperBound
#else
return arc4random_uniform(upperBound)
#endif
}

涉及主题:

  • gdb 调试
  • ulimit、prlimit 更新 core dump 大小限制
  • Swift + Ubuntu 下的随机数
  • 分析 Linux 日志、日志分割
  • 服务的生产环境、测试环境
  • Nginx 简单防 DDOS,即限制总连接数、单位时间请求数