cockroachdb / docs

CockroachDB user documentation
https://cockroachlabs.com/docs
Creative Commons Attribution 4.0 International
187 stars 453 forks source link

doc additional requirement when building from source: at least 4GB RAM #421

Closed glycerine closed 8 years ago

glycerine commented 8 years ago

cockroach source at 9959a236a0da44371112293d56b9340f47d2ba53 (June 16, 2016) on linux amd64/centos7.2 with g++ 4.9.2

I tried to build from source on a 512MB Digital Ocean droplet, but g++ would just run out of memory and die when building c-rocksdb. Then I tried a 1GB droplet, but this also ran out of memory during build.

In the docs/install-cockroachdb.md section on building from source, there is a great set of requirements listed: g++ version, git-version, and so forth.

It might be a kindness to the developer to add to this list.

Let them know that at least 2GB (update: at least 4GB) of RAM will be needed by the c++ compilation.

I actually haven't confirmed this yet, it will take another half-hour to create a droplet from snapshot with that size (copying in all the pre-reqs from the snapshot takes quite some time), but I'm pretty sure that should suffice. (Finger's crossed!)

This would have saved me a bunch of time creating new droplets.

[jaten@cr3 cockroach]$ make # on a 1GB memory droplet; we got past the c-rocksdb, but then still run out of memory later...
GOPATH set to /home/jaten/go
/home/jaten/go/bin added to PATH
go build -v -i -o cockroach
github.com/cockroachdb/cockroach/storage/engine/rocksdb
github.com/cockroachdb/cockroach/storage/engine
github.com/cockroachdb/cockroach/storage
github.com/cockroachdb/cockroach/server
github.com/cockroachdb/cockroach/cli
github.com/cockroachdb/cockroach
# github.com/cockroachdb/cockroach
/usr/local/go/pkg/tool/linux_amd64/link: running g++ failed: fork/exec /opt/rh/devtoolset-3/root/usr/bin/g++: cannot allocate memory

make: *** [install] Error 2
[jaten@cr3 cockroach]$ 
[jaten@cr3 cockroach]$ free -m
              total        used        free      shared  buff/cache   available
Mem:            993          45         689           6         258         813
Swap:             0           0           0
[jaten@cr3 cockroach]$ 
glycerine commented 8 years ago

Confirmed: 2GB is enough RAM to build from source.

glycerine commented 8 years ago

Correction: 2GB was enough to build, but not enough to also test the built server. Hence for building from source and running the test suite, recommend more, such as 4GB or more memory.

[jaten@cr3 cockroach]$ make
GOPATH set to /home/jaten/go
/home/jaten/go/bin added to PATH
go build -v -i -o cockroach
github.com/cockroachdb/c-rocksdb
github.com/cockroachdb/cockroach/storage/engine/rocksdb
github.com/cockroachdb/cockroach/storage/engine
github.com/cockroachdb/cockroach/storage
github.com/cockroachdb/cockroach/server
github.com/cockroachdb/cockroach/cli
github.com/cockroachdb/cockroach
go test -v  -i ./...
github.com/docker/distribution/digest
github.com/Sirupsen/logrus
github.com/docker/distribution/reference
github.com/opencontainers/runc/libcontainer/user
golang.org/x/net/proxy
github.com/docker/engine-api/types/blkiodev
github.com/docker/engine-api/types/strslice
github.com/docker/go-connections/nat
github.com/docker/go-connections/sockets
github.com/docker/go-units
github.com/docker/engine-api/types/container
github.com/docker/engine-api/client/transport
github.com/docker/engine-api/types/versions
github.com/docker/engine-api/types/filters
github.com/docker/engine-api/types/network
github.com/docker/engine-api/types/registry
github.com/docker/engine-api/client/transport/cancellable
github.com/docker/engine-api/types
github.com/docker/engine-api/types/reference
github.com/docker/engine-api/types/time
github.com/docker/go-connections/tlsconfig
github.com/docker/engine-api/types/events
github.com/cockroachdb/cockroach/acceptance/iptables
github.com/docker/engine-api/client
github.com/cockroachdb/cockroach/acceptance/terrafarm
github.com/cockroachdb/cockroach/gossip/simulation
github.com/cockroachdb/cockroach/acceptance/cluster
github.com/cockroachdb/cockroach/security/securitytest
github.com/cockroachdb/cockroach/sql/pgbench
github.com/cockroachdb/cockroach/testutils
github.com/cockroachdb/cockroach/testutils/buildutil
github.com/cockroachdb/cockroach/testutils/gossiputil
github.com/cockroachdb/cockroach/testutils/localtestcluster
github.com/cockroachdb/cockroach/testutils/sqlutils
github.com/cockroachdb/cockroach/testutils/storageutils
github.com/cockroachdb/cockroach/util/leaktest
github.com/go-sql-driver/mysql
github.com/termie/go-shutil
go test  -run "." -timeout 1m10s ./... 
?       github.com/cockroachdb/cockroach    [no test files]
ok      github.com/cockroachdb/cockroach/acceptance 0.066s
ok      github.com/cockroachdb/cockroach/acceptance/cluster 0.093s
ok      github.com/cockroachdb/cockroach/acceptance/iptables    0.028s
?       github.com/cockroachdb/cockroach/acceptance/terrafarm   [no test files]
ok      github.com/cockroachdb/cockroach/base   0.031s
?       github.com/cockroachdb/cockroach/build  [no test files]
ok      github.com/cockroachdb/cockroach/cli    11.605s
?       github.com/cockroachdb/cockroach/cli/cliflags   [no test files]
ok      github.com/cockroachdb/cockroach/client 4.711s
?       github.com/cockroachdb/cockroach/cmd/gossipsim  [no test files]
?       github.com/cockroachdb/cockroach/cmd/protoc-gen-gogoroach   [no test files]
ok      github.com/cockroachdb/cockroach/config 0.046s
ok      github.com/cockroachdb/cockroach/gossip 0.833s
ok      github.com/cockroachdb/cockroach/gossip/resolver    0.030s
?       github.com/cockroachdb/cockroach/gossip/simulation  [no test files]
ok      github.com/cockroachdb/cockroach/keys   0.029s
ok      github.com/cockroachdb/cockroach/kv 28.943s
ok      github.com/cockroachdb/cockroach/roachpb    0.130s
ok      github.com/cockroachdb/cockroach/rpc    0.507s
ok      github.com/cockroachdb/cockroach/security   0.257s
?       github.com/cockroachdb/cockroach/security/securitytest  [no test files]
ok      github.com/cockroachdb/cockroach/server 21.290s
?       github.com/cockroachdb/cockroach/server/serverpb    [no test files]
ok      github.com/cockroachdb/cockroach/server/status  0.061s
?       github.com/cockroachdb/cockroach/server/testingshim [no test files]
ok      github.com/cockroachdb/cockroach/sql    49.661s
ok      github.com/cockroachdb/cockroach/sql/distsql    0.925s
ok      github.com/cockroachdb/cockroach/sql/parser 0.076s
?       github.com/cockroachdb/cockroach/sql/pgbench    [no test files]
?       github.com/cockroachdb/cockroach/sql/pgbench/cmd/pgbenchsetup   [no test files]
ok      github.com/cockroachdb/cockroach/sql/pgwire 0.039s
?       github.com/cockroachdb/cockroach/sql/pgwire/pgerror [no test files]
ok      github.com/cockroachdb/cockroach/sql/privilege  0.008s
ok      github.com/cockroachdb/cockroach/sql/sqlbase    0.067s
?       github.com/cockroachdb/cockroach/sql/sqlutil    [no test files]
ok      github.com/cockroachdb/cockroach/storage    48.603s
ok      github.com/cockroachdb/cockroach/storage/engine 4.404s
?       github.com/cockroachdb/cockroach/storage/engine/enginepb    [no test files]
?       github.com/cockroachdb/cockroach/storage/engine/rocksdb [no test files]
?       github.com/cockroachdb/cockroach/storage/simulation [no test files]
?       github.com/cockroachdb/cockroach/storage/storagebase    [no test files]
?       github.com/cockroachdb/cockroach/testutils  [no test files]
?       github.com/cockroachdb/cockroach/testutils/buildutil    [no test files]
?       github.com/cockroachdb/cockroach/testutils/gossiputil   [no test files]
?       github.com/cockroachdb/cockroach/testutils/localtestcluster [no test files]
ok      github.com/cockroachdb/cockroach/testutils/sqlutils 0.024s
?       github.com/cockroachdb/cockroach/testutils/storageutils [no test files]
ok      github.com/cockroachdb/cockroach/ts 0.241s
?       github.com/cockroachdb/cockroach/ts/tspb    [no test files]
?       github.com/cockroachdb/cockroach/ui [no test files]
ok      github.com/cockroachdb/cockroach/util   0.128s
?       github.com/cockroachdb/cockroach/util/bufalloc  [no test files]
ok      github.com/cockroachdb/cockroach/util/cache 0.006s
ok      github.com/cockroachdb/cockroach/util/caller    0.006s
ok      github.com/cockroachdb/cockroach/util/decimal   18.864s
ok      github.com/cockroachdb/cockroach/util/duration  0.006s
ok      github.com/cockroachdb/cockroach/util/encoding  2.095s
ok      github.com/cockroachdb/cockroach/util/envutil   0.007s
?       github.com/cockroachdb/cockroach/util/grpcutil  [no test files]
ok      github.com/cockroachdb/cockroach/util/hlc   0.005s
ok      github.com/cockroachdb/cockroach/util/humanizeutil  0.008s
ok      github.com/cockroachdb/cockroach/util/interval  0.014s
?       github.com/cockroachdb/cockroach/util/leaktest  [no test files]
ok      github.com/cockroachdb/cockroach/util/log   1.014s
?       github.com/cockroachdb/cockroach/util/log/logflags  [no test files]
ok      github.com/cockroachdb/cockroach/util/metric    0.026s
ok      github.com/cockroachdb/cockroach/util/protoutil 0.019s
ok      github.com/cockroachdb/cockroach/util/randutil  0.007s
ok      github.com/cockroachdb/cockroach/util/retry 0.012s
ok      github.com/cockroachdb/cockroach/util/sdnotify  0.006s
ok      github.com/cockroachdb/cockroach/util/stop  0.121s
ok      github.com/cockroachdb/cockroach/util/timeutil  0.379s
?       github.com/cockroachdb/cockroach/util/tracing   [no test files]
?       github.com/cockroachdb/cockroach/util/uuid  [no test files]
=== RUN TestCopyrightHeaders
--- PASS: TestCopyrightHeaders (0.0s)
=== RUN TestEnvutil
--- PASS: TestEnvutil (0.0s)
=== RUN TestErrcheck
--- PASS: TestErrcheck (0.0s)
=== RUN TestForbiddenImports
--- PASS: TestForbiddenImports (0.0s)
=== RUN TestGofmtSimplify
--- PASS: TestGofmtSimplify (0.0s)
=== RUN TestGoimports
--- PASS: TestGoimports (0.0s)
=== RUN TestGolint
--- PASS: TestGolint (0.0s)
=== RUN TestGrpc
--- PASS: TestGrpc (0.0s)
=== RUN TestImportNames
--- PASS: TestImportNames (0.0s)
=== RUN TestIneffassign
--- PASS: TestIneffassign (0.0s)
=== RUN TestMissingLeakTest
--- PASS: TestMissingLeakTest (0.0s)
=== RUN TestMisspell
--- PASS: TestMisspell (0.0s)
=== RUN TestProtoClone
--- PASS: TestProtoClone (0.0s)
=== RUN TestProtoMarshal
--- PASS: TestProtoMarshal (0.0s)
=== RUN TestReturnCheck
--- PASS: TestReturnCheck (0.0s)
=== RUN TestSafeSQL
fatal error: runtime: out of memory

runtime stack:
runtime.throw(0x82d8e0, 0x16)
    /usr/local/go/src/runtime/panic.go:547 +0x90
runtime.sysMap(0xc88c910000, 0x100000, 0xc82011dd00, 0x9c9c38)
    /usr/local/go/src/runtime/mem_linux.go:206 +0x9b
runtime.(*mheap).sysAlloc(0x9b0ba0, 0x100000, 0x0)
    /usr/local/go/src/runtime/malloc.go:429 +0x191
runtime.(*mheap).grow(0x9b0ba0, 0x8, 0x0)
    /usr/local/go/src/runtime/mheap.go:651 +0x63
runtime.(*mheap).allocSpanLocked(0x9b0ba0, 0x1, 0x7f571caf4f68)
    /usr/local/go/src/runtime/mheap.go:553 +0x4f6
runtime.(*mheap).alloc_m(0x9b0ba0, 0x1, 0x10000000005, 0x7f571caf4f68)
    /usr/local/go/src/runtime/mheap.go:437 +0x119
runtime.(*mheap).alloc.func1()
    /usr/local/go/src/runtime/mheap.go:502 +0x41
runtime.systemstack(0xc82011de58)
    /usr/local/go/src/runtime/asm_amd64.s:307 +0xab
runtime.(*mheap).alloc(0x9b0ba0, 0x1, 0x10000000005, 0x410fd4)
    /usr/local/go/src/runtime/mheap.go:503 +0x63
runtime.(*mcentral).grow(0x9b20a0, 0x0)
    /usr/local/go/src/runtime/mcentral.go:209 +0x93
runtime.(*mcentral).cacheSpan(0x9b20a0, 0xc8413c7530)
    /usr/local/go/src/runtime/mcentral.go:89 +0x47d
runtime.(*mcache).refill(0x7f571f390000, 0x5, 0xc8413c7500)
    /usr/local/go/src/runtime/mcache.go:119 +0xcc
runtime.mallocgc.func2()
    /usr/local/go/src/runtime/malloc.go:642 +0x2b
runtime.systemstack(0xc820014000)
    /usr/local/go/src/runtime/asm_amd64.s:291 +0x79
runtime.mstart()
    /usr/local/go/src/runtime/proc.go:1051

goroutine 1 [running]:
runtime.systemstack_switch()
    /usr/local/go/src/runtime/asm_amd64.s:245 fp=0xc88377ad38 sp=0xc88377ad30
runtime.mallocgc(0x40, 0x793680, 0xc800000000, 0xc88c90ffc0)
    /usr/local/go/src/runtime/malloc.go:643 +0x869 fp=0xc88377ae10 sp=0xc88377ad38
runtime.newobject(0x793680, 0xc88baec8c0)
    /usr/local/go/src/runtime/malloc.go:781 +0x42 fp=0xc88377ae38 sp=0xc88377ae10
golang.org/x/tools/container/intsets.(*Sparse).UnionWith(0xc8508c2050, 0xc830310b90, 0xc88c90ff01)
    /home/jaten/go/src/golang.org/x/tools/container/intsets/sparse.go:528 +0x1ec fp=0xc88377ae70 sp=0xc88377ae38
golang.org/x/tools/go/pointer.(*nodeset).addAll(0xc8508c2050, 0xc830310b90, 0xc601)
    /home/jaten/go/src/golang.org/x/tools/go/pointer/util.go:284 +0x3a fp=0xc88377ae90 sp=0xc88377ae70
golang.org/x/tools/go/pointer.(*analysis).onlineCopy(0xc84cc0fc00, 0xc6b0000d8e45, 0x2)
    /home/jaten/go/src/golang.org/x/tools/go/pointer/solve.go:215 +0x2c7 fp=0xc88377af58 sp=0xc88377ae90
golang.org/x/tools/go/pointer.(*analysis).onlineCopyN(0xc84cc0fc00, 0xc6b0000d8e45, 0xc800000002, 0xc800000002)
    /home/jaten/go/src/golang.org/x/tools/go/pointer/solve.go:229 +0x4b fp=0xc88377af80 sp=0xc88377af58
golang.org/x/tools/go/pointer.(*invokeConstraint).solve(0xc84e43d600, 0xc84cc0fc00, 0xc855df1240)
    /home/jaten/go/src/golang.org/x/tools/go/pointer/solve.go:362 +0x781 fp=0xc88377b100 sp=0xc88377af80
golang.org/x/tools/go/pointer.(*analysis).solveConstraints(0xc84cc0fc00, 0xc85be7f6e0, 0xc855df1240)
    /home/jaten/go/src/golang.org/x/tools/go/pointer/solve.go:167 +0x231 fp=0xc88377b240 sp=0xc88377b100
golang.org/x/tools/go/pointer.(*analysis).solve(0xc84cc0fc00)
    /home/jaten/go/src/golang.org/x/tools/go/pointer/solve.go:61 +0xdb4 fp=0xc88377b410 sp=0xc88377b240
golang.org/x/tools/go/pointer.Analyze(0xc84dd75bc0, 0x0, 0x0, 0x0)
    /home/jaten/go/src/golang.org/x/tools/go/pointer/analysis.go:328 +0x121c fp=0xc88377bb08 sp=0xc88377b410
main.main()
    /home/jaten/go/src/github.com/stripe/safesql/safesql.go:71 +0xa92 fp=0xc88377bf30 sp=0xc88377bb08
runtime.main()
    /usr/local/go/src/runtime/proc.go:188 +0x2b0 fp=0xc88377bf80 sp=0xc88377bf30
runtime.goexit()
    /usr/local/go/src/runtime/asm_amd64.s:1998 +0x1 fp=0xc88377bf88 sp=0xc88377bf80

--- FAIL: TestSafeSQL (0.0s)
=== RUN TestTabsInShellScripts
--- PASS: TestTabsInShellScripts (0.0s)
=== RUN TestTimeutil
--- PASS: TestTimeutil (0.0s)
=== RUN TestUnused
--- PASS: TestUnused (0.0s)
=== RUN TestVarcheck
--- PASS: TestVarcheck (0.0s)
=== RUN TestVet
--- PASS: TestVet (0.0s)
=== RUN TestVetShadow
--- PASS: TestVetShadow (0.0s)
FAIL check-style 0.0s
make: *** [check] Error 1
[jaten@cr3 cockroach]$ 
jseldess commented 8 years ago

Thanks, @glycerine.

@bdarnell, @petermattis, ok if I add "At least 4GB of RAM" as an additional requirement for building from source, both in the docs and in the cockroach CONTRIBUTING.md file?

petermattis commented 8 years ago

@jseldess Seems fine to me.

It's a bit sad that the analysis tool (safesql), not the Go compiler, is the component that needs more memory.