At the start of the thread, you said "if I compile and run this simple 
program ..."

Does the problem no longer reproduce with that?

On Monday, 11 April 2022 at 22:59:55 UTC+1 scorr...@gmail.com wrote:

> I tried with a more complex application and already got constant 100% CPU 
> usage twice. 
>
> When I attach strace I see the same as with the minimal demo but with much 
> more frecuency:
>
> [pid 42659] 23:36:49.035120 epoll_pwait(3, [], 128, 0, NULL, 
> 140341803388040) = 0
> [pid 42659] 23:36:49.035133 epoll_pwait(3, [], 128, 0, NULL, 
> 18704162493558) = 0
> [pid 42659] 23:36:49.035145 epoll_pwait(3, [], 128, 0, NULL, 
> 140341803388040) = 0
> [pid 42659] 23:36:49.035158 epoll_pwait(3, [], 128, 0, NULL, 
> 18704162493558) = 0
> [pid 42659] 23:36:49.035170 epoll_pwait(3, [], 128, 0, NULL, 
> 140341803388040) = 0
> [pid 42659] 23:36:49.035182 epoll_pwait(3, [], 128, 0, NULL, 
> 18704162493558) = 0
> [pid 42659] 23:36:49.035195 epoll_pwait(3, [], 128, 0, NULL, 
> 140341803388040) = 0
> [pid 42659] 23:36:49.035207 epoll_pwait(3, [], 128, 0, NULL, 
> 18704162493558) = 0
> [pid 42659] 23:36:49.035219 epoll_pwait(3, [], 128, 0, NULL, 
> 140341803388040) = 0
> [pid 42659] 23:36:49.035232 epoll_pwait(3, [], 128, 0, NULL, 
> 18704162493558) = 0
> [pid 42659] 23:36:49.035244 epoll_pwait(3, [], 128, 0, NULL, 
> 140341803388040) = 0
> [pid 42659] 23:36:49.035257 epoll_pwait(3, [], 128, 0, NULL, 
> 18704162493558) = 0
> [pid 42659] 23:36:49.035269 epoll_pwait(3, [], 128, 0, NULL, 
> 140341803388040) = 0
> [pid 42659] 23:36:49.035281 epoll_pwait(3, [], 128, 0, NULL, 
> 18704162493558) = 0
> [pid 42659] 23:36:49.035293 epoll_pwait(3, [], 128, 0, NULL, 
> 140341803388040) = 0
> [pid 42659] 23:36:49.035306 epoll_pwait(3, [], 128, 0, NULL, 
> 18704162493558) = 0
>
> The program is too large to post here. I have tested it with go race and 
> it doesn't run into any problem. Any idea of what to look for?
>
> Thank you!
>
> El lunes, 11 de abril de 2022 a las 17:08:40 UTC+2, Santiago Corredoira 
> escribió:
>
>> I tried with the stripped tmp version of "go run" and after a while I was 
>> able to reproduce it too. It definitely took me more time but probably is 
>> just random. 
>>
>> I tried "$ GODEBUG=asyncpreemptoff=1 ./test" and I kept seeing the the 
>> calls every 10ms. Is this expected to happen?
>>
>> I compiled the test with "$ go1.16 build test.go" and I tried hard to 
>> reproduce it but I couldn't. It is very strange because this behaviour was 
>> introduced in Go 1.14 and I only see it in Go 1.17. Also asyncpreemptoff=1 
>> seems to make no difference.
>>
>> I am going to work again with Go 1.18 by default to see if I get the 100% 
>> CPU usage.
>>
>> El lunes, 11 de abril de 2022 a las 13:28:48 UTC+2, Brian Candler 
>> escribió:
>>
>>> On Monday, 11 April 2022 at 09:26:28 UTC+1 scorr...@gmail.com wrote:
>>>
>>>> and the output keeps growing like that with every new curl request 
>>>> until eventually it starts constantly printing output like this:
>>>>
>>>>>
>>>>> [pid 143818] 10:02:22.697120 nanosleep({tv_sec=0, tv_nsec=10000000}, 
>>>>> NULL) = 0
>>>>> [pid 143818] 10:02:22.707609 nanosleep({tv_sec=0, tv_nsec=10000000}, 
>>>>> NULL) = 0
>>>>> [pid 143818] 10:02:22.718125 nanosleep({tv_sec=0, tv_nsec=10000000}, 
>>>>> NULL) = 0
>>>>> [pid 143818] 10:02:22.728753 nanosleep({tv_sec=0, tv_nsec=10000000}, 
>>>>> NULL) = 0
>>>>> [pid 143818] 10:02:22.739195 nanosleep({tv_sec=0, tv_nsec=10000000}, 
>>>>> NULL) = 0
>>>>> [pid 143818] 10:02:22.749618 nanosleep({tv_sec=0, tv_nsec=10000000}, 
>>>>> NULL) = 0
>>>>> [pid 143818] 10:02:22.760160 nanosleep({tv_sec=0, tv_nsec=10000000}, 
>>>>> NULL) = 0
>>>>> [pid 143818] 10:02:22.770669 nanosleep({tv_sec=0, tv_nsec=10000000}, 
>>>>> NULL) = 0
>>>>> [pid 143818] 10:02:22.781137 nanosleep({tv_sec=0, tv_nsec=10000000}, 
>>>>> NULL) = 0
>>>>> [pid 143818] 10:02:22.791581 nanosleep({tv_sec=0, tv_nsec=10000000}, 
>>>>> NULL) = 0
>>>>> [pid 143818] 10:02:22.802060 nanosleep({tv_sec=0, tv_nsec=10000000}, 
>>>>> NULL) = 0
>>>>> [pid 143818] 10:02:22.812540 nanosleep({tv_sec=0, tv_nsec=10000000}, 
>>>>> NULL) = 0
>>>>> [pid 143818] 10:02:22.822981 nanosleep({tv_sec=0, tv_nsec=10000000}, 
>>>>> NULL) = 0
>>>>> [pid 143818] 10:02:22.833468 nanosleep({tv_sec=0, tv_nsec=10000000}, 
>>>>> NULL) = 0
>>>>>
>>>>>
>>> That is normal, I believe, for a process with multiple runnable 
>>> goroutines - one alarm/wakeup call every 10ms.
>>>
>>> What is odd is the 100% CPU utilisation.  Can you attach an strace when 
>>> that happens?
>>>
>>> As for the binary produced by "go run" - use "ps" to see where it is.  
>>> For example:
>>>
>>> ==> sleepy.go <==
>>> package main
>>>
>>> import (
>>>     "sync"
>>>         "time"
>>> )
>>>
>>> func main() {
>>>     var wg sync.WaitGroup
>>>     wg.Add(1)
>>>         go func() {
>>>                 time.Sleep(30 * time.Second)
>>>                 wg.Done()
>>>         }()
>>>     wg.Wait()
>>> }
>>> ==> end <==
>>>
>>> $ go run sleepy.go
>>>
>>> ... in another window ...
>>> $ ps auxwww | grep sleepy
>>> ubuntu     17743  0.0  0.1 1237424 12428 pts/1   Sl+  11:23   0:00 go 
>>> run sleepy.go
>>> ubuntu     17782  0.0  0.0 702468  1052 pts/1    Sl+  11:23   0:00 
>>> /tmp/go-build2834561198/b001/exe/sleepy
>>>
>>> You can 'cp' it somewhere to keep it safe.
>>>
>>> If I compare this with the output of "go build sleepy.go", I see that 
>>> the "go build" version is larger and unstripped:
>>>
>>> $ cp /tmp/go-build2834561198/b001/exe/sleepy sleepy-run
>>> $ file sleepy-run
>>> sleepy-run: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), 
>>> statically linked, stripped
>>> $ go build sleepy.go
>>> $ file sleepy
>>> sleepy: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically 
>>> linked, not stripped
>>>
>>> Then "strip sleepy" gives me a binary which is almost, but not quite, 
>>> the same size as the one from "go run".  So that gives you another way to 
>>> try to reproduce the problem - although if the difference is just between 
>>> stripped and unstripped, then it's most likely some sort of edge timing 
>>> case.
>>>
>>

-- 
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/48302bb4-650d-4329-b9c1-77b6aaaf8f97n%40googlegroups.com.

Reply via email to