hi. get the time at the start, check the elapsed time in your infinite
loop, and trigger the write/exit after a minute, 10 minutes, 100 minutes,
...

On Fri, Mar 13, 2020 at 5:45 AM Nitish Saboo <nitish.sabo...@gmail.com>
wrote:

> Hi Michael,
>
> Thanks for your response.
>
> That code looks wrong. I see the end but not the start. Look here and copy
> carefully:
>
> >>Since I did not want cpu profiling I omitted the start of the code and
> just added memory profiling part.
>
> Call at end, on way out.
>
> >>Oh yes, I missed that.I have to call memory profiling code at the end on
> the way out.But the thing is that it runs as a service in infinite for loop.
>
> func main() {
> flag.Parse()
> if *cpuprofile != "" {
> f, err := os.Create(*cpuprofile)
> if err != nil {
> fmt.Println("could not create CPU profile: ", err)
> }
> defer f.Close() // error handling omitted for example
> if err := pprof.StartCPUProfile(f); err != nil {
> fmt.Print("could not start CPU profile: ", err)
> }
> defer pprof.StopCPUProfile()
> }
>
> A_chan := make(chan bool)
> B_chan := make(chan bool)
> go util.A(A_chan)
> go util.B(B_chan)
> (..Rest of the code..)
>
> for {
> select {
> case <-A_chan:
> continue
> case <-B_chan:
> continue
>
> }
> }
>
> }
>
> What would be the correct way to add the memprofile code changes, since it
> is running in an infinite for loop ?
>
> Also, as shared by others above, there are no promises about how soon the
> dead allocations go away, The speed gets faster and faster version to
> version, and is impressive indeed now, so old versions are not the best to
> use, ubt even so, if the allocation feels small to th GC the urgency to
> free it will be low. You need to loop in allocating and see if the memory
> grows and grows.
>
> >> Yes, got it.I will try using the latest version of Go and check the
> behavior.
>
> Thanks,
> Nitish
>
> On Fri, Mar 13, 2020 at 6:20 AM Michael Jones <michael.jo...@gmail.com>
> wrote:
>
>> That code looks wrong. I see the end but not the start. Look here and
>> copy carefully:
>> https://golang.org/pkg/runtime/pprof/
>>
>> Call at end, on way out.
>>
>> Also, as shared by others above, there are no promises about how soon the
>> dead allocations go away, The speed gets faster and faster version to
>> version, and is impressive indeed now, so old versions are not the best to
>> use, ubt even so, if the allocation feels small to th GC the urgency to
>> free it will be low. You need to loop in allocating and see if the memory
>> grows and grows.
>>
>> On Thu, Mar 12, 2020 at 9:22 AM Nitish Saboo <nitish.sabo...@gmail.com>
>> wrote:
>>
>>> Hi,
>>>
>>> I have compiled my Go binary against go version 'go1.7 linux/amd64'.
>>> I added the following code change in the main function to get the memory
>>> profiling of my service
>>>
>>> var memprofile = flag.String("memprofile", "", "write memory profile to
>>> `file`")
>>>
>>> func main() {
>>> flag.Parse()
>>> if *memprofile != "" {
>>> f, err := os.Create(*memprofile)
>>> if err != nil {
>>> fmt.Println("could not create memory profile: ", err)
>>> }
>>> defer f.Close() // error handling omitted for example
>>> runtime.GC() // get up-to-date statistics
>>> if err := pprof.WriteHeapProfile(f); err != nil {
>>> fmt.Println("could not write memory profile: ", err)
>>> }
>>> }
>>> ..
>>> ..
>>> (Rest code to follow)
>>>
>>> I ran the binary with the following command:
>>>
>>> nsaboo@ubuntu:./main -memprofile=mem.prof
>>>
>>> After running the service for couple of minutes, I stopped it and got
>>> the file 'mem.prof'
>>>
>>> 1)mem.prof contains the following:
>>>
>>> nsaboo@ubuntu:~/Desktop/memprof$ vim mem.prof
>>>
>>> heap profile: 0: 0 [0: 0] @ heap/1048576
>>>
>>> # runtime.MemStats
>>> # Alloc = 761184
>>> # TotalAlloc = 1160960
>>> # Sys = 3149824
>>> # Lookups = 10
>>> # Mallocs = 8358
>>> # Frees = 1981
>>> # HeapAlloc = 761184
>>> # HeapSys = 1802240
>>> # HeapIdle = 499712
>>> # HeapInuse = 1302528
>>> # HeapReleased = 0
>>> # HeapObjects = 6377
>>> # Stack = 294912 / 294912
>>> # MSpan = 22560 / 32768
>>> # MCache = 2400 / 16384
>>> # BuckHashSys = 2727
>>> # NextGC = 4194304
>>> # PauseNs = [752083 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
>>> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
>>> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
>>> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
>>> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
>>> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
>>> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
>>> 0]
>>> # NumGC = 1
>>> # DebugGC = false
>>>
>>> 2)When I tried to open the file using the following command, it just
>>> goes into interactive mode and shows nothing
>>>
>>> a)Output from go version go1.7 linux/amd64 for mem.prof
>>>
>>> nsaboo@ubuntu:~/Desktop/memprof$ go tool pprof mem.prof
>>> Entering interactive mode (type "help" for commands)
>>> (pprof) top
>>> profile is empty
>>> (pprof)
>>>
>>> b)Output from go version go1.12.4 linux/amd64 for mem.prof
>>>
>>> nsaboo@ubuntu:~/Desktop/memprof$ go tool pprof mem.prof
>>> Type: space
>>> No samples were found with the default sample value type.
>>> Try "sample_index" command to analyze different sample values.
>>> Entering interactive mode (type "help" for commands, "o" for options)
>>> (pprof) o
>>>   call_tree                 = false
>>>   compact_labels            = true
>>>   cumulative                = flat                 //: [cum | flat]
>>>   divide_by                 = 1
>>>   drop_negative             = false
>>>   edgefraction              = 0.001
>>>   focus                     = ""
>>>   granularity               = functions            //: [addresses |
>>> filefunctions | files | functions | lines]
>>>   hide                      = ""
>>>   ignore                    = ""
>>>   mean                      = false
>>>   nodecount                 = -1                   //: default
>>>   nodefraction              = 0.005
>>>   noinlines                 = false
>>>   normalize                 = false
>>>   output                    = ""
>>>   prune_from                = ""
>>>   relative_percentages      = false
>>>   sample_index              = space                //: [objects | space]
>>>   show                      = ""
>>>   show_from                 = ""
>>>   tagfocus                  = ""
>>>   taghide                   = ""
>>>   tagignore                 = ""
>>>   tagshow                   = ""
>>>   trim                      = true
>>>   trim_path                 = ""
>>>   unit                      = minimum
>>> (pprof) space
>>> (pprof) sample_index
>>> (pprof) top
>>> Showing nodes accounting for 0, 0% of 0 total
>>>       flat  flat%   sum%        cum   cum%
>>>
>>>
>>> 3)Please let me know if it is this the correct way of getting the memory
>>> profiling ?
>>>
>>> 4)Can we deduce something from this memory stats that points us to
>>> increase in memory usage?
>>>
>>> 5)I am just thinking out loud, since I am using go1.7, can that be the
>>> reason for the issue of increase in memory usage that might get fixed with
>>> latest go versions ?
>>>
>>> Thanks,
>>> Nitish
>>>
>>> On Tue, Mar 10, 2020 at 6:56 AM Jake Montgomery <jake6...@gmail.com>
>>> wrote:
>>>
>>>>
>>>> On Monday, March 9, 2020 at 1:37:00 PM UTC-4, Nitish Saboo wrote:
>>>>>
>>>>> Hi Jake,
>>>>>
>>>>> The memory usage remains constant when the rest of the service is
>>>>> running.Only when LoadPatternDB() method is called within the service,
>>>>> Memory Consumption increases which actually should not happen.
>>>>>  I am assuming if there is a memory leak while calling this method
>>>>> because the memory usage then becomes constant after getting increased and
>>>>> then further increases on next call.
>>>>>
>>>>
>>>> Its possible that I am not fully understanding, perhaps a language
>>>> problem. But from what you have written above I still don't see that this
>>>> means you definitely have a memory leak. To test for that you would need 
>>>> to *continuously
>>>> *call LoadPatternDB() and monitor memory for a *considerable time*. If
>>>> it eventually stabilizes to a constant range then there is no leak, just
>>>> normal Go-GC variation. If it never stops climbing, and eventually consumes
>>>> all the memory, then it would probably be a leak. Just because it goes up
>>>> after one call, or a few calls doe not mean there is a leak.
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "golang-nuts" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to golang-nuts+unsubscr...@googlegroups.com.
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/golang-nuts/f897fdb1-8968-4435-9fe9-02e167e09a36%40googlegroups.com
>>>> <https://groups.google.com/d/msgid/golang-nuts/f897fdb1-8968-4435-9fe9-02e167e09a36%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "golang-nuts" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to golang-nuts+unsubscr...@googlegroups.com.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/golang-nuts/CALjMrq6DC98p4M4V2QCbQFTcsL1PtOWELvg8MEcMYj9EM9ui_A%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/golang-nuts/CALjMrq6DC98p4M4V2QCbQFTcsL1PtOWELvg8MEcMYj9EM9ui_A%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>
>>
>> --
>>
>> *Michael T. jonesmichael.jo...@gmail.com <michael.jo...@gmail.com>*
>>
>

-- 

*Michael T. jonesmichael.jo...@gmail.com <michael.jo...@gmail.com>*

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CALoEmQzRmrY3u-4CdZw_548HuO%2B2qRXMeu_uUxJER3jUrWx9nQ%40mail.gmail.com.

Reply via email to