mirror of
https://github.com/kubeshark/kubeshark.git
synced 2025-08-03 01:33:36 +00:00
* Add gin-contrib/pprof dependency * Run pprof server on agent with --profiler flag * Add --profiler flag to cli * Fix error message * Print cpu usage percentage * measure cpu of current pid instead of globaly on the system * Add scripts to plot performance * Plot packetsCount in analysis * Concat to DataFrame * Plot in turbo colorscheme * Make COLORMAP const * Fix rss units * Reduce code repetition by adding function for plotting * Allow grouping based on filenames * Temporary: Marked with comments where to disable code for experiments * Add newline at end of file * Add tap.cpuprofile flag. Change memprofile flag to tap.memprofile * create tapper modes for debugging using env vars * Fix rss plot units (MB instead of bytes) * Remove comment * Add info to plot script * Remove tap.cpumemprofile. Rename tap.memprofile to memprofile * Remove unused import * Remove whitespaces Co-authored-by: M. Mert Yıldıran <mehmet@up9.com> * Remove whitespaces Co-authored-by: M. Mert Yıldıran <mehmet@up9.com> * Remove whitespaces Co-authored-by: M. Mert Yıldıran <mehmet@up9.com> * Remove whitespaces Co-authored-by: M. Mert Yıldıran <mehmet@up9.com> * Remove whitespaces Co-authored-by: M. Mert Yıldıran <mehmet@up9.com> * Remove whitespaces Co-authored-by: M. Mert Yıldıran <mehmet@up9.com> * Rename debug env vars * Create package for debug env vars, read each env var once * Run go mod tidy * Increment MatchedPairs before emitting * Only count cores once * Count virtual and physical cores * Add dbgctl replace in cli * Fix lint: Check return values * Add tap/dbgctl to test-lint make rule * Replace tap/dbgctl in all modules * #run_acceptance_tests * Copy dbgctl module to docker image * Debug/profile tapper benchmark (#1093) * add mizu debug env to avoid all extensions * add readme + run_tapper_benchmark.sh * temporary change branch name * fix readme * fix MIZU_BENCHMARK_CLIENTS_COUNT env * change tap target to tcp stream * track live tcp streams * pr fixes * rename tapperPacketsCount to ignored_packets_count * change mizu tapper to mizu debugg Co-authored-by: David Levanon <dvdlevanon@gmail.com> Co-authored-by: M. Mert Yıldıran <mehmet@up9.com>
74 lines
2.0 KiB
Go
74 lines
2.0 KiB
Go
package tap
|
|
|
|
import (
|
|
"runtime"
|
|
_debug "runtime/debug"
|
|
"sync"
|
|
"time"
|
|
|
|
"github.com/up9inc/mizu/logger"
|
|
"github.com/up9inc/mizu/tap/api"
|
|
"github.com/up9inc/mizu/tap/diagnose"
|
|
)
|
|
|
|
type tcpStreamMap struct {
|
|
streams *sync.Map
|
|
streamId int64
|
|
}
|
|
|
|
func NewTcpStreamMap() api.TcpStreamMap {
|
|
return &tcpStreamMap{
|
|
streams: &sync.Map{},
|
|
}
|
|
}
|
|
|
|
func (streamMap *tcpStreamMap) Range(f func(key, value interface{}) bool) {
|
|
streamMap.streams.Range(f)
|
|
}
|
|
|
|
func (streamMap *tcpStreamMap) Store(key, value interface{}) {
|
|
streamMap.streams.Store(key, value)
|
|
diagnose.AppStats.IncLiveTcpStreams()
|
|
}
|
|
|
|
func (streamMap *tcpStreamMap) Delete(key interface{}) {
|
|
streamMap.streams.Delete(key)
|
|
diagnose.AppStats.DecLiveTcpStreams()
|
|
}
|
|
|
|
func (streamMap *tcpStreamMap) NextId() int64 {
|
|
streamMap.streamId++
|
|
return streamMap.streamId
|
|
}
|
|
|
|
func (streamMap *tcpStreamMap) CloseTimedoutTcpStreamChannels() {
|
|
tcpStreamChannelTimeoutMs := GetTcpChannelTimeoutMs()
|
|
closeTimedoutTcpChannelsIntervalMs := GetCloseTimedoutTcpChannelsInterval()
|
|
logger.Log.Infof("Using %d ms as the close timedout TCP stream channels interval", closeTimedoutTcpChannelsIntervalMs/time.Millisecond)
|
|
|
|
ticker := time.NewTicker(closeTimedoutTcpChannelsIntervalMs)
|
|
for {
|
|
<-ticker.C
|
|
|
|
_debug.FreeOSMemory()
|
|
streamMap.streams.Range(func(key interface{}, value interface{}) bool {
|
|
// `*tlsStream` is not yet applicable to this routine.
|
|
// So, we cast into `(*tcpStream)` and ignore `*tlsStream`
|
|
stream, ok := value.(*tcpStream)
|
|
if !ok {
|
|
return true
|
|
}
|
|
|
|
if stream.protocol == nil {
|
|
if !stream.isClosed && time.Now().After(stream.createdAt.Add(tcpStreamChannelTimeoutMs)) {
|
|
stream.close()
|
|
diagnose.AppStats.IncDroppedTcpStreams()
|
|
logger.Log.Debugf("Dropped an unidentified TCP stream because of timeout. Total dropped: %d Total Goroutines: %d Timeout (ms): %d",
|
|
diagnose.AppStats.DroppedTcpStreams, runtime.NumGoroutine(), tcpStreamChannelTimeoutMs/time.Millisecond)
|
|
}
|
|
}
|
|
return true
|
|
})
|
|
}
|
|
}
|