Documentation ¶
Overview ¶
Implements methods to filter samples from profiles.
Package profile provides a representation of profile.proto and methods to encode/decode profiles in this format.
Index ¶
- Variables
- type Demangler
- type Function
- type Label
- type Line
- type Location
- type Mapping
- type Profile
- func (p *Profile) Aggregate(inlineFrame, function, filename, linenumber, address bool) error
- func (p *Profile) CheckValid() error
- func (p *Profile) Compatible(pb *Profile) error
- func (p *Profile) Copy() *Profile
- func (p *Profile) Demangle(d Demangler) error
- func (p *Profile) FilterSamplesByName(focus, ignore, hide *regexp.Regexp) (fm, im, hm bool)
- func (p *Profile) FilterSamplesByTag(focus, ignore TagMatch) (fm, im bool)
- func (p *Profile) HasFileLines() bool
- func (p *Profile) HasFunctions() bool
- func (p *Profile) Merge(pb *Profile, r float64) error
- func (p *Profile) ParseMemoryMap(rd io.Reader) error
- func (p *Profile) Prune(dropRx, keepRx *regexp.Regexp)
- func (p *Profile) RemoveUninteresting() error
- func (p *Profile) String() string
- func (p *Profile) Write(w io.Writer) error
- type Sample
- type TagMatch
- type ValueType
Constants ¶
This section is empty.
Variables ¶
var ( // LegacyHeapAllocated instructs the heapz parsers to use the // allocated memory stats instead of the default in-use memory. Note // that tcmalloc doesn't provide all allocated memory, only in-use // stats. LegacyHeapAllocated bool )
Functions ¶
This section is empty.
Types ¶
type Demangler ¶
Demangler maps symbol names to a human-readable form. This may include C++ demangling and additional simplification. Names that are not demangled may be missing from the resulting map.
type Function ¶
type Function struct { ID uint64 Name string SystemName string Filename string StartLine int64 // contains filtered or unexported fields }
Function corresponds to Profile.Function
type Label ¶
type Label struct {
// contains filtered or unexported fields
}
Label corresponds to Profile.Label
type Location ¶
type Location struct { ID uint64 Mapping *Mapping Address uint64 Line []Line // contains filtered or unexported fields }
Location corresponds to Profile.Location
type Mapping ¶
type Mapping struct { ID uint64 Start uint64 Limit uint64 Offset uint64 File string BuildID string HasFunctions bool HasFilenames bool HasLineNumbers bool HasInlineFrames bool // contains filtered or unexported fields }
Mapping corresponds to Profile.Mapping
type Profile ¶
type Profile struct { SampleType []*ValueType Sample []*Sample Mapping []*Mapping Location []*Location Function []*Function DropFrames string KeepFrames string TimeNanos int64 DurationNanos int64 PeriodType *ValueType Period int64 // contains filtered or unexported fields }
Profile is an in-memory representation of profile.proto.
func Parse ¶
Parse parses a profile and checks for its validity. The input may be a gzip-compressed encoded protobuf or one of many legacy profile formats which may be unsupported in the future.
func ParseTracebacks ¶
ParseTracebacks parses a set of tracebacks and returns a newly populated profile. It will accept any text file and generate a Profile out of it with any hex addresses it can identify, including a process map if it can recognize one. Each sample will include a tag "source" with the addresses recognized in string format.
func (*Profile) Aggregate ¶
Aggregate merges the locations in the profile into equivalence classes preserving the request attributes. It also updates the samples to point to the merged locations.
func (*Profile) CheckValid ¶
CheckValid tests whether the profile is valid. Checks include, but are not limited to:
- len(Profile.Sample[n].value) == len(Profile.value_unit)
- Sample.id has a corresponding Profile.Location
func (*Profile) Compatible ¶
Compatible determines if two profiles can be compared/merged. returns nil if the profiles are compatible; otherwise an error with details on the incompatibility.
func (*Profile) Demangle ¶
Demangle attempts to demangle and optionally simplify any function names referenced in the profile. It works on a best-effort basis: it will silently preserve the original names in case of any errors.
func (*Profile) FilterSamplesByName ¶
FilterSamplesByName filters the samples in a profile and only keeps samples where at least one frame matches focus but none match ignore. Returns true is the corresponding regexp matched at least one sample.
func (*Profile) FilterSamplesByTag ¶
FilterSamplesByTag removes all samples from the profile, except those that match focus and do not match the ignore regular expression.
func (*Profile) HasFileLines ¶
HasFileLines determines if all locations in this profile have symbolized file and line number information.
func (*Profile) HasFunctions ¶
HasFunctions determines if all locations in this profile have symbolized function information.
func (*Profile) Merge ¶
Merge adds profile p adjusted by ratio r into profile p. Profiles must be compatible (same Type and SampleType). TODO(rsilvera): consider normalizing the profiles based on the total samples collected.
func (*Profile) ParseMemoryMap ¶
ParseMemoryMap parses a memory map in the format of /proc/self/maps, and overrides the mappings in the current profile. It renumbers the samples and locations in the profile correspondingly.
func (*Profile) Prune ¶
Prune removes all nodes beneath a node matching dropRx, and not matching keepRx. If the root node of a Sample matches, the sample will have an empty stack.
func (*Profile) RemoveUninteresting ¶
RemoveUninteresting prunes and elides profiles using built-in tables of uninteresting function names.
type Sample ¶
type Sample struct { Location []*Location Value []int64 Label map[string][]string NumLabel map[string][]int64 // contains filtered or unexported fields }
Sample corresponds to Profile.Sample