You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							55 lines
						
					
					
						
							980 B
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							55 lines
						
					
					
						
							980 B
						
					
					
				
								package grace
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"os"
							 | 
						|
									"runtime"
							 | 
						|
									"runtime/pprof"
							 | 
						|
								
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/glog"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								func SetupProfiling(cpuProfile, memProfile string) {
							 | 
						|
									if cpuProfile != "" {
							 | 
						|
										f, err := os.Create(cpuProfile)
							 | 
						|
										if err != nil {
							 | 
						|
											glog.Fatal(err)
							 | 
						|
										}
							 | 
						|
										runtime.SetBlockProfileRate(1)
							 | 
						|
										runtime.SetMutexProfileFraction(1)
							 | 
						|
										pprof.StartCPUProfile(f)
							 | 
						|
										OnInterrupt(func() {
							 | 
						|
											pprof.StopCPUProfile()
							 | 
						|
								
							 | 
						|
											// write block pprof
							 | 
						|
											blockF, err := os.Create(cpuProfile + ".block")
							 | 
						|
											if err != nil {
							 | 
						|
												return
							 | 
						|
											}
							 | 
						|
											p := pprof.Lookup("block")
							 | 
						|
											p.WriteTo(blockF, 0)
							 | 
						|
											blockF.Close()
							 | 
						|
								
							 | 
						|
											// write mutex pprof
							 | 
						|
											mutexF, err := os.Create(cpuProfile + ".mutex")
							 | 
						|
											if err != nil {
							 | 
						|
												return
							 | 
						|
											}
							 | 
						|
											p = pprof.Lookup("mutex")
							 | 
						|
											p.WriteTo(mutexF, 0)
							 | 
						|
											mutexF.Close()
							 | 
						|
								
							 | 
						|
										})
							 | 
						|
									}
							 | 
						|
									if memProfile != "" {
							 | 
						|
										runtime.MemProfileRate = 1
							 | 
						|
										f, err := os.Create(memProfile)
							 | 
						|
										if err != nil {
							 | 
						|
											glog.Fatal(err)
							 | 
						|
										}
							 | 
						|
										OnInterrupt(func() {
							 | 
						|
											pprof.WriteHeapProfile(f)
							 | 
						|
											f.Close()
							 | 
						|
										})
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
								}
							 |