Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
dms3
go-dms3
Commits
74b38cb6
Commit
74b38cb6
authored
Nov 10, 2014
by
Brian Tiger Chow
Committed by
Juan Batiz-Benet
Nov 14, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor(ipfs2/main) change the way we handle profiling
parent
d72af9c9
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
28 additions
and
10 deletions
+28
-10
cmd/ipfs2/main.go
cmd/ipfs2/main.go
+28
-10
No files found.
cmd/ipfs2/main.go
View file @
74b38cb6
...
...
@@ -26,12 +26,11 @@ import (
var
log
=
u
.
Logger
(
"cmd/ipfs"
)
const
(
heapProfile
=
"ipfs.mprof"
cpuProfile
=
"ipfs.cpuprof"
heapProfile
=
"ipfs.memprof"
errorFormat
=
"ERROR: %v
\n\n
"
)
var
ofi
io
.
WriteCloser
func
main
()
{
err
:=
run
()
if
err
!=
nil
{
...
...
@@ -58,15 +57,12 @@ func run() error {
u
.
SetAllLoggers
(
logging
.
DEBUG
)
}
// if debugging, setup profiling.
if
u
.
Debug
{
var
err
error
ofi
,
err
=
os
.
Create
(
"cpu.prof"
)
stopProfilingFunc
,
err
:=
startProfiling
()
if
err
!=
nil
{
return
err
}
pprof
.
StartCPUProfile
(
ofi
)
defer
stopProfilingFunc
()
// to be executed as late as possible
}
helpTextDisplayed
,
err
:=
handleHelpOption
(
req
,
root
)
...
...
@@ -228,7 +224,7 @@ func outputResponse(res cmds.Response, root *cmds.Command) error {
}
}
emptyErr
:=
errors
.
New
(
""
)
// already displayed error text
, but want to exit(1)
emptyErr
:=
errors
.
New
(
""
)
// already displayed error text
return
emptyErr
}
...
...
@@ -266,12 +262,34 @@ func getConfig(path string) (*config.Config, error) {
return
config
.
Load
(
configFile
)
}
// startProfiling begins CPU profiling and returns a `stop` function to be
// executed as late as possible. The stop function captures the memprofile.
func
startProfiling
()
(
func
(),
error
)
{
// start CPU profiling as early as possible
ofi
,
err
:=
os
.
Create
(
cpuProfile
)
if
err
!=
nil
{
return
nil
,
err
}
pprof
.
StartCPUProfile
(
ofi
)
stopProfiling
:=
func
()
{
pprof
.
StopCPUProfile
()
defer
ofi
.
Close
()
// captured by the closure
err
:=
writeHeapProfileToFile
()
if
err
!=
nil
{
log
.
Critical
(
err
)
}
}
return
stopProfiling
,
nil
}
func
writeHeapProfileToFile
()
error
{
mprof
,
err
:=
os
.
Create
(
heapProfile
)
if
err
!=
nil
{
return
err
}
defer
mprof
.
Close
()
defer
mprof
.
Close
()
// _after_ writing the heap profile
return
pprof
.
WriteHeapProfile
(
mprof
)
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment