h2non / imaginary

Fast, simple, scalable, Docker-ready HTTP microservice for high-level image processing
https://fly.io/docs/app-guides/run-a-global-image-service/
MIT License
5.52k stars 456 forks source link

malloc_consolidate(): invalid chunk size #306

Open nullne opened 4 years ago

nullne commented 4 years ago

i am benching with various image size and target size and the program got crashed. it seems somewhat bug over there.

it is reproducible:

wrk -c 20 -t1 -d 1h "http://127.0.0.1:9000/crop?width=640&height=640&stripmeta=true&quality=70&type=jpeg&file=1M.jpg"

panic stack trace

malloc_consolidate(): invalid chunk size
127.0.0.1 - - [18/May/2020 13:04:31] "GET /crop?width=640&height=640&stripmeta=true&quality=70&type=jpeg&file=1M.jpg HTTP/1.1" 200 54570 0.0790
SIGABRT: abort
PC=0x7fbd790087bb m=104 sigcode=18446744073709551610

goroutine 0 [idle]:
runtime: unknown pc 0x7fbd790087bb
stack: frame={sp:0x7fb8a8ff83b0, fp:0x0} stack=[0x7fb8a87f9288,0x7fb8a8ff8e88)
00007fb8a8ff82b0:  00007fbd79528cc0  00007fbd792e4c9c
00007fb8a8ff82c0:  0000000000000001  0000000000da56e0
00007fb8a8ff82d0:  0000000000000001  00007fbd792e2ba1
00007fb8a8ff82e0:  0000000000000000  0000000000000170
00007fb8a8ff82f0:  0000003040000002  00007fbd791ef18f
00007fb8a8ff8300:  00007fb998001d10  00007fb8a8ff8448
00007fb8a8ff8310:  0000000000000000  0000000000000000
00007fb8a8ff8320:  00007fbad80481f0  4332be5e1ab58500
00007fb8a8ff8330:  0000000000000000  00007fbad80481f0
00007fb8a8ff8340:  0000000000da5730  00007fbd792f687b
00007fb8a8ff8350:  00007fb8a8ff83f0  0000000000000020
00007fb8a8ff8360:  00007fb8a8ff84a0  0000000000000000
00007fb8a8ff8370:  00007fbc24013020  0000000006f5cd2b
00007fb8a8ff8380:  00007fb8a8ff8420  0000000000000000
00007fb8a8ff8390:  0000000000da56e0  0000000000da5730
00007fb8a8ff83a0:  00007fb8a8ff8440  0000000b00000010
00007fb8a8ff83b0: <0000000000000000  0000000000000000
00007fb8a8ff83c0:  0000000000000000  00007fb8a8ff8410
00007fb8a8ff83d0:  0000000000000008  0000000000000010
00007fb8a8ff83e0:  0000000000000010  0000000000000010
00007fb8a8ff83f0:  000000000000000b  000000000000001f
00007fb8a8ff8400:  0000000000000000  00007fbd7921f239
00007fb8a8ff8410:  00007fbd08ff1cc0  00007fbc24013020
00007fb8a8ff8420:  000000000000000b  0000000100000004
00007fb8a8ff8430:  fffffffe7fffffff  ffffffffffffffff
00007fb8a8ff8440:  ffffffffffffffff  ffffffffffffffff
00007fb8a8ff8450:  ffffffffffffffff  ffffffffffffffff
00007fb8a8ff8460:  ffffffffffffffff  ffffffffffffffff
00007fb8a8ff8470:  ffffffffffffffff  ffffffffffffffff
00007fb8a8ff8480:  ffffffffffffffff  ffffffffffffffff
00007fb8a8ff8490:  ffffffffffffffff  ffffffffffffffff
00007fb8a8ff84a0:  ffffffffffffffff  ffffffffffffffff

goroutine 873995 [syscall]:
runtime.cgocall(0x6f4830, 0xc00092d790, 0xc0004a8030)
        /usr/local/go/src/runtime/cgocall.go:128 +0x5b fp=0xc00092d760 sp=0xc00092d728 pc=0x4077ab
gopkg.in/h2non/bimg%2ev1._Cfunc_vips_jpegsave_bridge(0x7fb8fc02faf0, 0xc0004a8030, 0xc0006ae0c8, 0x4600000001, 0x0, 0xc000000000)
        _cgo_gotypes.go:902 +0x4d fp=0xc00092d790 sp=0xc00092d760 pc=0x6bc91d
gopkg.in/h2non/bimg%2ev1.vipsSave.func7(0x7fb8fc02faf0, 0xc0004a8030, 0xc0006ae0c8, 0x4600000001, 0x0, 0x280)
        /go/pkg/mod/github.com/nullne/bimg@v1.0.20-0.20200508115901-e9615884ba81/vips.go:443 +0xf8 fp=0xc00092d7d0 sp=0xc00092d790 pc=0x6c59e8
gopkg.in/h2non/bimg%2ev1.vipsSave(0x7fb9880b8640, 0x46, 0x6, 0x1, 0x10000, 0x0, 0x0, 0x16, 0x0, 0x0, ...)
        /go/pkg/mod/github.com/nullne/bimg@v1.0.20-0.20200508115901-e9615884ba81/vips.go:443 +0x1c6 fp=0xc00092d8e8 sp=0xc00092d7d0 pc=0x6c1aa6
gopkg.in/h2non/bimg%2ev1.saveImage(0x7fb9880b8640, 0x280, 0x280, 0x0, 0x0, 0x0, 0x0, 0x46, 0x6, 0x0, ...)
        /go/pkg/mod/github.com/nullne/bimg@v1.0.20-0.20200508115901-e9615884ba81/resizer.go:180 +0x137 fp=0xc00092d998 sp=0xc00092d8e8 pc=0x6beb27
gopkg.in/h2non/bimg%2ev1.resizer(0xc002012000, 0x13bca3, 0x13bea3, 0x280, 0x280, 0x0, 0x0, 0x0, 0x0, 0x46, ...)
        /go/pkg/mod/github.com/nullne/bimg@v1.0.20-0.20200508115901-e9615884ba81/resizer.go:135 +0x608 fp=0xc00092e000 sp=0xc00092d998 pc=0x6be148
gopkg.in/h2non/bimg%2ev1.Resize(0xc002012000, 0x13bca3, 0x13bea3, 0x280, 0x280, 0x0, 0x0, 0x0, 0x0, 0x46, ...)
        /go/pkg/mod/github.com/nullne/bimg@v1.0.20-0.20200508115901-e9615884ba81/resize.go:15 +0x12b fp=0xc00092e210 sp=0xc00092e000 pc=0x6bab1b
main.Process(0xc002012000, 0x13bca3, 0x13bea3, 0x280, 0x280, 0x0, 0x0, 0x0, 0x0, 0x46, ...)
        /go/src/github.com/h2non/imaginary/image.go:409 +0x104 fp=0xc00092e448 sp=0xc00092e210 pc=0x6e3414
main.Crop(0xc002012000, 0x13bca3, 0x13bea3, 0x0, 0x1, 0x280, 0x280, 0x0, 0x0, 0x46, ...)
        /go/src/github.com/h2non/imaginary/image.go:201 +0x121 fp=0xc00092e8b8 sp=0xc00092e448 pc=0x6e0891
main.Operation.Run(...)
        /go/src/github.com/h2non/imaginary/image.go:46
main.imageHandler(0x831820, 0xc00061cc00, 0xc00053a100, 0xc002012000, 0x13bca3, 0x13bea3, 0x7cdc68, 0x2328, 0x64, 0x0, ...)
        /go/src/github.com/h2non/imaginary/controllers.go:116 +0x206 fp=0xc00092ee58 sp=0xc00092e8b8 pc=0x6dce46
main.imageController.func1(0x831820, 0xc00061cc00, 0xc00053a100)
        /go/src/github.com/h2non/imaginary/controllers.go:56 +0x1de fp=0xc00092f4a0 sp=0xc00092ee58 pc=0x6edd2e
net/http.HandlerFunc.ServeHTTP(0xc00011cec0, 0x831820, 0xc00061cc00, 0xc00053a100)
        /usr/local/go/src/net/http/server.go:2007 +0x44 fp=0xc00092f4c8 sp=0xc00092f4a0 pc=0x66ef14
main.defaultHeaders.func1(0x831820, 0xc00061cc00, 0xc00053a100)
        /go/src/github.com/h2non/imaginary/middleware.go:135 +0x1ff fp=0xc00092f570 sp=0xc00092f4c8 pc=0x6eef9f
net/http.HandlerFunc.ServeHTTP(0xc00011cee0, 0x831820, 0xc00061cc00, 0xc00053a100)
        /usr/local/go/src/net/http/server.go:2007 +0x44 fp=0xc00092f598 sp=0xc00092f570 pc=0x66ef14
main.validate.func1(0x831820, 0xc00061cc00, 0xc00053a100)
        /go/src/github.com/h2non/imaginary/middleware.go:95 +0x93 fp=0xc00092f838 sp=0xc00092f598 pc=0x6ee853
net/http.HandlerFunc.ServeHTTP(0xc00011cf00, 0x831820, 0xc00061cc00, 0xc00053a100)
        /usr/local/go/src/net/http/server.go:2007 +0x44 fp=0xc00092f860 sp=0xc00092f838 pc=0x66ef14

....

goroutine 874000 [runnable]:
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:310
sync.runtime_notifyListWait(0xc00025e110, 0x7cc)
        /usr/local/go/src/runtime/sema.go:510 +0xf8
sync.(*Cond).Wait(0xc00025e100)
        /usr/local/go/src/sync/cond.go:56 +0x9d
net/http.(*connReader).abortPendingRead(0xc0004320c0)
        /usr/local/go/src/net/http/server.go:725 +0xbe
net/http.(*response).finishRequest(0xc0002c8000)
        /usr/local/go/src/net/http/server.go:1590 +0x96
net/http.(*conn).serve(0xc000178a00, 0x8321a0, 0xc00025e080)
        /usr/local/go/src/net/http/server.go:1895 +0x8b3
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:2928 +0x384

rax    0x0
rbx    0x6
rcx    0xffffffffffffffff
rdx    0x0
rdi    0x2
rsi    0x7fb8a8ff83b0
rbp    0x7fb8a8ff8700
rsp    0x7fb8a8ff83b0
r8     0x0
r9     0x7fb8a8ff83b0
r10    0x8
r11    0x246
r12    0x7fb8a8ff8620
r13    0x1000
r14    0x10
r15    0x7fbd798ac000
rip    0x7fbd790087bb
rflags 0x246
cs     0x33
fs     0x0
gs     0x0
nullne commented 4 years ago

it can be reproduced

fatal error: unexpected signal during runtime execution
[signal SIGSEGV: segmentation violation code=0x1 addr=0x18a8 pc=0x7fb5c03d6878]

runtime stack:
runtime.throw(0x7bf5fc, 0x2a)
        /usr/local/go/src/runtime/panic.go:774 +0x72
runtime.sigpanic()
        /usr/local/go/src/runtime/signal_unix.go:378 +0x47c

goroutine 1090080 [syscall]:
runtime.cgocall(0x6f48c0, 0xc000893738, 0xc0004b4008)
        /usr/local/go/src/runtime/cgocall.go:128 +0x5b fp=0xc000893708 sp=0xc0008936d0 pc=0x4077ab
gopkg.in/h2non/bimg%2ev1._Cfunc_vips_reduce_bridge(0x7fb404235b10, 0xc0004b4008, 0x3ffb000000000000, 0x3ffb000000000000, 0x0)
        _cgo_gotypes.go:939 +0x4d fp=0xc000893738 sp=0xc000893708 pc=0x6bcb6d
gopkg.in/h2non/bimg%2ev1.vipsReduce.func2(0x7fb404235b10, 0xc0004b4008, 0x3ffb000000000000, 0x3ffb000000000000, 0x408705)
        /go/pkg/mod/github.com/nullne/bimg@v1.0.20-0.20200508115901-e9615884ba81/vips.go:572 +0xea fp=0xc000893770 sp=0xc000893738 pc=0x6c6c4a
gopkg.in/h2non/bimg%2ev1.vipsReduce(0x7fb404235b10, 0x3ffb000000000000, 0x3ffb000000000000, 0x0, 0x0, 0x0)
        /go/pkg/mod/github.com/nullne/bimg@v1.0.20-0.20200508115901-e9615884ba81/vips.go:572 +0xbe fp=0xc0008937e8 sp=0xc000893770 pc=0x6c2c2e
gopkg.in/h2non/bimg%2ev1.transformImage(0x7fb404235b10, 0x280, 0x280, 0x0, 0x0, 0x0, 0x0, 0x46, 0x6, 0x0, ...)
        /go/pkg/mod/github.com/nullne/bimg@v1.0.20-0.20200508115901-e9615884ba81/resizer.go:217 +0x206 fp=0xc000893998 sp=0xc0008937e8 pc=0x6bed96
gopkg.in/h2non/bimg%2ev1.resizer(0xc003a0e000, 0x13bca3, 0x13bea3, 0x280, 0x280, 0x0, 0x0, 0x0, 0x0, 0x46, ...)
        /go/pkg/mod/github.com/nullne/bimg@v1.0.20-0.20200508115901-e9615884ba81/resizer.go:97 +0x85c fp=0xc000894000 sp=0xc000893998 pc=0x6be39c
gopkg.in/h2non/bimg%2ev1.Resize(0xc003a0e000, 0x13bca3, 0x13bea3, 0x280, 0x280, 0x0, 0x0, 0x0, 0x0, 0x46, ...)
        /go/pkg/mod/github.com/nullne/bimg@v1.0.20-0.20200508115901-e9615884ba81/resize.go:15 +0x12b fp=0xc000894210 sp=0xc000894000 pc=0x6bab1b
main.Process(0xc003a0e000, 0x13bca3, 0x13bea3, 0x280, 0x280, 0x0, 0x0, 0x0, 0x0, 0x46, ...)
        /go/src/github.com/h2non/imaginary/image.go:409 +0x104 fp=0xc000894448 sp=0xc000894210 pc=0x6e3414
main.Crop(0xc003a0e000, 0x13bca3, 0x13bea3, 0x0, 0x1, 0x280, 0x280, 0x0, 0x0, 0x46, ...)
        /go/src/github.com/h2non/imaginary/image.go:201 +0x121 fp=0xc0008948b8 sp=0xc000894448 pc=0x6e0891
main.Operation.Run(...)