起きている事象
- 以下のプログラムをメモリ容量の少ないサーバ(ec2:t2.micro、ラズベリーパイ:4GBなど)で動作させると3hほどで接続ができなくなったりフリーズし再起動が必要になる
ざっくり仕様
- ビットコインの情報を取得(チャネルで表現)
- 取得後にいろいろ加工してテーブルへ保存
現状までの調査結果
- 取得する処理自体では問題はなさそう(
起きている事象
は発生しない)
いろいろ加工してテーブルへ保存
する処理で何か問題が発生している模様
テーブル保存時に毎回やっている処理(エラーハンドリングは省略してます)
func (t *Ticker) TruncateDateTime(duration time.Duration) time.Time {
return t.DateTime().Truncate(duration)
}
func (t *Ticker) DateTime() time.Time {
dateTime, err := time.Parse(time.RFC3339, t.Timestamp)
return dateTime
}
func NewCandle(productCode string, duration time.Duration, timeDate time.Time, open, close, high, low, volume float64) *candleInfraStruct {
return &candleInfraStruct{
ProductCode: productCode,
Duration: duration,
Time: timeDate,
Open: open,
Close: close,
High: high,
Low: low,
Volume: volume,
}
}
candle := candle.NewCandle(productCode, duration, ticker.TruncateDateTime(duration),
price, price, price, price, ticker.Volume)
candle.Insert()
現状やっている対策
- 保存が終わったタイミングで
runtime.GC()
をやって検証中。
調査方法などご指摘いただければ幸いです。