CN109313602A - 紧急关系中栈段强度的相关性 - Google Patents
紧急关系中栈段强度的相关性 Download PDFInfo
- Publication number
- CN109313602A CN109313602A CN201780036497.4A CN201780036497A CN109313602A CN 109313602 A CN109313602 A CN 109313602A CN 201780036497 A CN201780036497 A CN 201780036497A CN 109313602 A CN109313602 A CN 109313602A
- Authority
- CN
- China
- Prior art keywords
- stack
- segment
- frame
- trace
- thread
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000001514 detection method Methods 0.000 claims abstract description 14
- 230000001932 seasonal effect Effects 0.000 claims description 173
- 238000000034 method Methods 0.000 claims description 107
- 238000003860 storage Methods 0.000 claims description 51
- 238000005259 measurement Methods 0.000 claims description 49
- 230000015654 memory Effects 0.000 claims description 44
- 238000012544 monitoring process Methods 0.000 claims description 21
- 238000001914 filtration Methods 0.000 claims description 12
- 230000001052 transient effect Effects 0.000 claims description 7
- 230000005055 memory storage Effects 0.000 claims 1
- 238000005516 engineering process Methods 0.000 abstract description 27
- 230000008569 process Effects 0.000 description 58
- 238000005070 sampling Methods 0.000 description 36
- 238000004458 analytical method Methods 0.000 description 32
- 230000001788 irregular Effects 0.000 description 30
- 238000012545 processing Methods 0.000 description 28
- 238000007726 management method Methods 0.000 description 24
- 238000004891 communication Methods 0.000 description 23
- 238000004519 manufacturing process Methods 0.000 description 20
- 230000004044 response Effects 0.000 description 20
- 230000008859 change Effects 0.000 description 18
- 230000006870 function Effects 0.000 description 18
- 238000009499 grossing Methods 0.000 description 18
- 238000009826 distribution Methods 0.000 description 14
- 239000010813 municipal solid waste Substances 0.000 description 14
- 230000033764 rhythmic process Effects 0.000 description 14
- 238000012417 linear regression Methods 0.000 description 12
- 230000006835 compression Effects 0.000 description 11
- 238000007906 compression Methods 0.000 description 11
- 238000012360 testing method Methods 0.000 description 11
- 239000000243 solution Substances 0.000 description 9
- 238000004364 calculation method Methods 0.000 description 8
- 238000005457 optimization Methods 0.000 description 8
- 238000006073 displacement reaction Methods 0.000 description 7
- 230000007246 mechanism Effects 0.000 description 7
- 238000009966 trimming Methods 0.000 description 7
- 230000012010 growth Effects 0.000 description 6
- PEDCQBHIVMGVHV-UHFFFAOYSA-N Glycerine Chemical compound OCC(O)CO PEDCQBHIVMGVHV-UHFFFAOYSA-N 0.000 description 5
- 230000009467 reduction Effects 0.000 description 5
- 238000006467 substitution reaction Methods 0.000 description 5
- 230000007704 transition Effects 0.000 description 5
- 241000406668 Loxodonta cyclotis Species 0.000 description 4
- 238000010276 construction Methods 0.000 description 4
- 239000012636 effector Substances 0.000 description 4
- 238000013485 heteroscedasticity test Methods 0.000 description 4
- 229910052739 hydrogen Inorganic materials 0.000 description 4
- 230000003993 interaction Effects 0.000 description 4
- 230000033001 locomotion Effects 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 238000010606 normalization Methods 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 4
- 108090000623 proteins and genes Proteins 0.000 description 4
- 230000011218 segmentation Effects 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 230000001133 acceleration Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 3
- 230000003044 adaptive effect Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 230000001413 cellular effect Effects 0.000 description 3
- 230000007774 longterm Effects 0.000 description 3
- 230000006855 networking Effects 0.000 description 3
- 238000011160 research Methods 0.000 description 3
- 230000000007 visual effect Effects 0.000 description 3
- 238000000692 Student's t-test Methods 0.000 description 2
- 239000000654 additive Substances 0.000 description 2
- 230000000996 additive effect Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 2
- 238000010219 correlation analysis Methods 0.000 description 2
- 238000000151 deposition Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000002347 injection Methods 0.000 description 2
- 239000007924 injection Substances 0.000 description 2
- 238000011835 investigation Methods 0.000 description 2
- 230000002045 lasting effect Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000002156 mixing Methods 0.000 description 2
- 238000006116 polymerization reaction Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000003786 synthesis reaction Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 2
- 230000003442 weekly effect Effects 0.000 description 2
- 241000208340 Araliaceae Species 0.000 description 1
- 239000002028 Biomass Substances 0.000 description 1
- 208000032750 Device leakage Diseases 0.000 description 1
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 1
- 235000003140 Panax quinquefolius Nutrition 0.000 description 1
- 241001515806 Stictis Species 0.000 description 1
- 241000700605 Viruses Species 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 210000003484 anatomy Anatomy 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000012512 characterization method Methods 0.000 description 1
- 238000002591 computed tomography Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000003745 diagnosis Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 235000008434 ginseng Nutrition 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 239000011229 interlayer Substances 0.000 description 1
- 210000003127 knee Anatomy 0.000 description 1
- 239000010410 layer Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000002595 magnetic resonance imaging Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 210000000056 organ Anatomy 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000013138 pruning Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
- 230000029058 respiratory gaseous exchange Effects 0.000 description 1
- 238000005096 rolling process Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000009897 systematic effect Effects 0.000 description 1
- 238000003325 tomography Methods 0.000 description 1
- 238000004454 trace mineral analysis Methods 0.000 description 1
- 238000002604 ultrasonography Methods 0.000 description 1
- 230000001755 vocal effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3037—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a memory, e.g. virtual memory, cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3442—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for planning or managing the needed capacity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3452—Performance evaluation by statistical analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/18—Complex mathematical operations for evaluating statistical data, e.g. average values, frequency distributions, probability functions, regression analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0631—Configuration or reconfiguration of storage systems by allocating resources to storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5044—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/505—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5055—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering software capabilities, i.e. software resources associated or available to the machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/50—Network service management, e.g. ensuring proper service fulfilment according to agreements
- H04L41/5003—Managing SLA; Interaction between SLA and QoS
- H04L41/5009—Determining service level performance parameters or violations of service level contracts, e.g. violations of agreed response time or mean time between failures [MTBF]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/3471—Address tracing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/86—Event-based monitoring
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Bioinformatics & Computational Biology (AREA)
- Evolutionary Biology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Data Mining & Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Human Computer Interaction (AREA)
- Operations Research (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Debugging And Monitoring (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
公开了用于顺序地分析一系列线程转储样本以估计栈帧的新归类的栈段的强度统计信息的某些技术。实施例可以沿着栈段的一个或多个线性连接的栈帧检测分支点,其中该栈段与过滤器状态相关联。在沿着栈段的一个或多个线性连接的栈帧检测到分支点后,一些实施例可以将该栈段分割成多个新栈段,每个新栈段包括栈帧的子集,其中该多个新栈段被栈段引用。然后,实施例可以至少部分地基于栈段的过滤器状态来初始化每个新栈段的过滤器状态。
Description
相关申请的交叉引用
本申请是于2017年5月5日提交的标题为“Correlation of Stack SegmentIntensity in Emergent Relationships”的美国非临时申请No.15/588,521、于2016年5月9日提交的标题为“Correlation of Thread Intensity and Heap Usage to IdentifyHeap-Hoarding Stack Traces”的美国临时申请No.62/333,786、于2016年5月9日提交的标题为“Memory Usage Determination Techniques”的美国临时申请No.62/333,798、于2016年5月9日提交的标题为“Compression Techniques for Encoding Stack TracesInformation”的美国临时申请No.62/333,804、于2016年5月9日提交的标题为“Correlation of Stack Segment Intensity in Emergent Relationships”的美国临时申请No.62/333,811、于2016年5月9日提交的标题为“Systems and Methods of StackTrace Analysis”的美国临时申请No.62/333,809、和于2016年5月23日提交的标题为“Characterization of Segments of Time-Series”的美国临时申请No.62/340,256、于2017年5月5日提交的标题为“Correlation of Thread Intensity And Heap Usage toIdentify Heap-Hoarding Stack Traces”的美国非临时申请No.15/588,531、于2017年5月5日提交的标题为“Memory Usage Determination Techniques”的美国非临时申请No.15/588,526、和于2017年5月5日提交的标题为“Compression Techniques for EncodingStack Trace Information”的美国非临时申请No.15/588,523的依据35U.S.C.119(e)的权益和优先权的国际申请,这些申请的全部内容通过引用并入本文,用于所有目的。
本申请涉及以下同时提交的申请,这些申请的全部内容通过引用并入本文,用于所有目的:
(1)于2017年5月8日提交的标题为“CORRELATION OF THREAD INTENSITY ANDHEAP USAGE TO IDENTIFY HEAP-HOARDING STACK TRACES”的PCT非临时申请No./_,_,(代理人案卷号:088325-1047566(175200PC))。
(2)于2017年5月8日提交的标题为“MEMORY USAGE DETERMINATION TECHNIQUES”的PCT非临时申请No./_,_,(代理人案卷号:088325-1047576(175210PC))。
(3)于2017年5月8日提交的标题为“COMPRESSION TECHNIQUES FOR ENCODINGSTACK TRACE INFORMATION”的PCT非临时申请No./_,_,(代理人案卷号:088325-1047578(175220PC))。
背景技术
通常,云服务提供商维护操作资源以满足与客户的服务级别协议(SLA)。提供商不断监视他们提供的云服务的性能指标,以确保服务符合SLA。然而,由于可用工具可能缺乏预测或检测即将发生的SLA违规的能力,因此操作资源可能无法规避违规。此外,由于这些工具可能缺乏诊断SLA违规的根本原因的能力,因此当在此类违规确实发生时,操作可能需要较长的时间才能解决此类违规。因此,客户体验可能会受到不利影响。
另外,这样的SLA可能要求系统地分析数据并且主动地对数据中的可操作信息采取行动以避免SLA违规并且还确定是否满足协议。遵循服务级别协议和其它要求可能是非常繁重的,并且随着时间的推移会变得更加繁重。
为了获得上述能力,需要的是代表使用高级别状态模型的系统的技术,其中基于系统的低级别事件和系统测量容易地更新该高级别状态模型。至于获得关于低级别事件的指标,可以工具化检测(instrument)系统底层的应用程序来收集事件的确切测量。然而,在这种方法中,工具化检测本身会影响测量。当围绕方法的工具化检测代码的执行时间在方法本身的执行时间中占主导地位时(例如,如果方法的调用计数高),该问题可能更加突出。
发明内容
公开了用于顺序地分析一系列线程转储样本以估计栈帧的新归类的栈段的强度统计信息的某些技术。
一个实施例针对一种方法。该方法可以包括:由计算机至少部分地基于一个或多个栈踪迹确定引用一组线性连接的栈帧的栈段的过滤器状态;接收栈踪迹;在接收到栈踪迹后,至少部分地基于该栈踪迹沿着所述栈段的所述一组线性连接的栈帧检测分支点;在沿着所述栈帧的所述一组线性连接的栈段检测到分支点后,将所述栈段分割成多个新栈段,该多个新栈段各自包括栈帧的子集,其中该多个新栈段由栈段引用;至少部分地基于栈段的过滤器状态来初始化与该多个新栈段对应的多个过滤器状态;以及至少部分地基于一个或多个后续栈踪迹,分别跟踪栈段的过滤器状态和与该多个新栈段对应的该多个过滤器状态中的每一个。
附图说明
下面参考以下附图详细描述说明性实施例:
图1描绘了以相对高频率的采样率在一段时间内的单个线程的示例性运行时剖析。
图2描绘了示例性调用上下文树。
图3描绘了根据一些实施例的虚拟机在一段时间内的示例性线程转储(dump)。
图4-图6描绘了根据一些实施例的示例性线程归类签名。
图7示出了简化的流程图,其描绘了根据一些实施例的响应于线程转储而生成和/或修改一个或多个线程归类签名。
图8示出了简化的流程图,其描绘了响应于检测到分支点而生成或修改线程归类签名。
图9示出了简化的流程图,其描绘了根据一些实施例的与高的堆使用量对应的代码的识别。
图10示出了简化的流程图,其描绘了根据一些实施例的各种类的线程与高的堆使用量之间的相关程度的计算。
图11描绘了示例曲线图,其中指派给样本测量值的权重跨示例数据集的时间范围相对于与样本测量值相关联的采样时间间隔而绘制。
图12描绘了示出针对生产环境中的堆使用量通过不同线性回归技术导出的趋势图的示例图表。
图13描绘了示出附加趋势图的示例图表,该附加趋势图图示了由标准鲁棒回归技术给出的不正确结果。
图14示出了简化的流程图,其描绘了根据一些实施例的信号预测的生成。
图15描绘了用于实现某些实施例的分布式系统的简化图。
图16描绘了根据一些实施例的在其中可以将服务作为云服务供应的系统环境的一个或多个部件的简化框图。
图17描绘了可以用于实现某些实施例的示例性计算机系统。
该专利或申请文件包含至少一幅彩色附图。具有彩色附图的本专利或专利申请出版物的副本将在请求和支付必要费用后由主管局提供。
具体实施方式
I.概述
在以下描述中,出于解释的目的,阐述了具体细节以便提供对本公开的实施例的透彻理解。然而,将清楚的是,可以在没有这些具体细节的情况下实践各种实施例。各图和描述不旨在是限制性的。
本公开一般而言涉及使用堆使用量统计信息和线程强度统计信息来识别多线程进程(例如,应用程序)内的代码块以用于潜在的优化并预测未来的堆使用量和/或线程强度。线程强度统计信息可以用于跟踪进程的响应、负载和资源使用量,而无需对进程的底层代码进行工具化检测或使用代码注入。具体而言,线程的类型或栈段的类型的强度可以指示正由该线程执行或正被该栈段引用的代码块的“热度”的统计度量。代码块的热度可以通过执行量来量化(例如,代码块的调用次数乘以代码块的执行时间)。较热的代码块具有较高的调用次数和/或较长的响应时间。
通过以规则或不规则的时间间隔分析从进程中获取的一系列线程转储,一些实施例可以提供统计采样解决方案,该解决方案(1)是低开销的,(2)是非侵入性的,(3)提供始终在线的(always-on)监视,以及(4)避免工具化检测代码在被进行工具化检测的代码的执行时间中占据主导地位的问题(即,海森堡(Heisenberg)问题)。
一些实施例可以基于强度统计信息对线程和栈段进行归类。通过监视从软件执行环境(例如,虚拟机)接收到的线程转储中包括的各个线程的栈踪迹,监视进程可以基于其栈踪迹的内容将线程归类为一个或多个线程类。随着更多的栈踪迹被分析,一些实施例可以观察到线程类到子类的分支并最终建立线程类的层次结构。例如,如果观察到栈段(A)是栈段(A,B,D)的组成部分,则可以说线程类型(A,B,D)是线程类型(A)的子类。也可以说线程类型(A,C)是线程类型(A)的子类。在如下的意义上,线程类型(A)包括子类(A,B,D)和(A,C),即,与(A,B,D)和(A,C)对应的强度统计信息的聚合可以通过与(A)对应的强度统计信息来表示。此外,一些实施例可以沿着线程类层次结构行进(例如,遍历树或图)以观察特定线程类的强度如何可以成比例地归因于该线程类的一个或多个子类的强度。例如,(A)的线程强度可以成比例地归因于(A,B,D)和(A,C)的线程强度。在其它实施例中,每个栈踪迹可以被表示为二叉树。
一些实施例可以提供一个或多个顺序过滤器来估计度量、变化速率、加速度、季节因子和残差。可以通过这样的实施例来执行表示多个时段(例如,工作日时段和周末时段)的单独季节索引并且对这多个时段的季节因子进行归一化的技术。具体而言,一些实施例可以针对多个时段中的每个时段表示单独的季节索引序列。例如,多个时段可以包括工作日时段、周末时段、季末时段或各个假日时段。在估计多个时段的季节索引时,一些实施例还可以(1)将季节索引重新归一化以在所有时段上提供公共的尺度和公共的参考水平,以及(2)跨相邻时段拟合平滑样条以提供在时段的周期之间或两个相邻时段的周期之间的平滑过渡。通过重新归一化,跨多个时段的季节因子可以具有公共的尺度。
一些实施例可以将各种线程类的强度统计信息和堆使用量统计信息之间的趋势进行相关,以识别其强度统计信息与高的堆使用量具有高度相关性的线程类。在其强度统计信息与软件执行环境中的高的堆使用量高度相关的线程类当中,很有可能发现低效的堆存储器使用。一旦识别出这些线程类,就可以调查和/或优化与这些线程类相关联的代码。
一些实施例可以构建和维护执行进程的多线程环境(例如,虚拟机)的模型(例如,单变量、多变量),其中模型包括每个线程类的强度的季节性趋势、线性趋势和一阶非线性趋势。这些模型可以用于获得关于系统性能趋势的季节性调整的长期预测。
通过(1)动态地对线程进行归类并观察线程类的子类的强度如何对线程类的聚合强度做出贡献,以及(2)观察各种线程类与检测到的高的堆使用量的时段相关的紧密程度,一些实施例可以促进检测和观察云服务供给系统内的性能故障。因为即使轻微的性能故障也常常会在进程中揭示可能导致SLA违规的问题,因此使服务提供商能够检测并解决性能故障可以极大降低此类违规的风险。
II.线程的运行时剖析
图1-图2描绘了对正在运行的线程进行剖析以确定各个栈段在该线程的调用栈上相对于彼此存在多长时间的技术。图1描绘了以相对高频率的采样率在一段时间内对单个线程100的示例性运行时剖析。在一些情况下,某些技术可以利用运行时剖析器来获取线程的多个栈踪迹样本以构造图2中所示的调用上下文树200。如果运行时剖析器采用的采样间隔与线程的执行时间相比相对较短,那么对线程的每个调用上下文的观察计数(即,调用计数)统计信息可以被用于相对于采样间隔来准确地估计和/或表示调用上下文的执行时间。
例如,如图1所示,线程100的总执行时间可以在100毫秒和1秒之间,而采样间隔在10毫秒和100毫秒之间。在线程的执行期间,取决于线程所调用的方法,线程的栈中可能存在不同的调用上下文。线程可以通过调用与栈段A对应的一组方法开始线程的执行。
应该注意的是,栈段与线性连接的一组一个或多个栈帧对应。线性连接的栈帧在栈踪迹内始终被一起观察,因此具有相同的强度统计信息。因此,栈段A可以与多个栈帧对应,诸如栈帧a1、a2和a3。对线程进行采样可能在栈帧列表中产生栈踪迹,该栈踪迹描述被采样的线程的整个调用上下文。如果列出的一些栈帧是线性连接的,那么这些栈帧可以在概念上被分组为栈段。因此,栈踪迹可以包括一个或多个栈段,每个栈段包括一个或多个栈帧。
随着线程继续其执行,与栈段A相关联的代码可能导致线程调用与栈段B对应的一组方法。接下来,与栈段B相关联的代码可能导致线程调用与栈段D对应的另一组方法。在短时间段之后,运行时剖析器可以获取线程100的样本1,从而产生第一栈踪迹。从第一栈踪迹中,运行时剖析器可以确定栈段A、B和D在采样时位于栈上。在采样间隔之后,运行时剖析器可以获取线程的另一个样本2,从而产生第二栈踪迹。从第二栈踪迹中,运行时剖析器可以确定栈段A、B和D位于栈上。随着线程继续执行,与栈段D相关联的方法可能返回,从而导致与栈段D对应的栈帧从栈弹出。接下来,运行时剖析器可以获取线程的另一个样本3,从而产生第三栈踪迹。从第三栈踪迹中,运行时剖析器可以确定栈段A和B位于栈上。
随着线程执行,栈段B调用栈段E,栈段E调用栈段F。接下来,获取样本4产生第四栈踪迹,其指示栈段A、B、E和F在栈上。栈段F、E和B一个接一个地返回。接下来,获取样本5产生第五栈踪迹,其指示仅栈段A在栈上。栈段A导致栈段C被推入到栈上。在栈段C返回之前,样本6和7被获取,从而产生第六栈踪迹和第七栈踪迹,两者都指示栈段A和C在栈上。最终,栈段C返回,从而只留下栈段A在栈上。当与栈段A相关联的方法返回时,该线程完成执行。
如图2所示,调用上下文树200描绘了栈段A-F相对于采样间隔的执行时间。节点202指示在所有七个样本中观察到栈段A。节点204指示在七个样本中的四个中观察到栈段B。节点206指示在七个样本中的两个中观察到栈段C。节点208指示在七个样本中的两个中观察到栈段D。节点210指示在七个样本中的一个中观察到栈段E。节点212指示在七个样本中的一个中观察到栈段F。因为线程100的总执行时间大约是采样间隔的持续时间的十倍,因此每个栈段的观察计数可以与栈段的执行时间紧密相关。例如,因为栈段B被观察到了四次,因此可以推断出栈段B的相对执行时间是采样间隔的至少四倍。
在一些情况下,线程100执行的环境(即,软件执行环境)可以对应于虚拟机(例如,热点Java虚拟机(JVM)),其中每个采样间隔进行一次线程转储。在虚拟机进行线程转储之前,它可以发信号通知所有正在执行的线程(例如,线程100)在安全点处暂停。该安全点机制可以类似于由垃圾收集器用来在执行完全垃圾回收之前暂停线程的机制。注意的是,在内核模式下运行的线程(例如,在I/O操作上运行/阻塞)可能在线程退出内核模式(例如,返回到JVM模式)之前不会在安全点处暂停。
然而,应该注意的是,以高频率调用安全点机制可能导致大量开销。因此,依赖于高采样率的运行时剖析技术可能更适合于开发或测试环境而不是生产环境。
为了减少开销,一些实施例采用系统模型来补偿降低的采样率。例如,一些实施例可以跟踪多线程进程的线程的强度,并且仅对强度超过阈值的线程进行采样,这些线程决定了延迟。采用降低的采样率或自适应采样率的实施例的一个优点是在内核模式下运行的线程不太可能在安全点处暂停。降低开销的其它方法可能涉及延长采样间隔以与被采样的线程的强度相称。例如,虽然一分钟的采样间隔可能导致生产环境内的开销可忽略不计,但是一分钟的采样间隔对于导出生产环境中线程的相对执行时间及其组成部分栈段可能足够短。因此,一些实施例可以为表现出平稳的平均遍历性或周期平稳的平均遍历性以满足Little公式的假设的生产系统提供始终在线的性能监视解决方案。在这样的实施例中,始终在线的性能监视解决方案可以被实施在监视进程(即,控制系统)中,该监视进程周期性地对在生产系统的一个或多个虚拟机内执行的线程进行采样。
III.对线程进行归类
各种实施例提供用于顺序地分析从一个或多个虚拟机(例如,JVM)获取的一系列线程转储样本以识别线程类并跟踪与线程类有关的强度统计信息的技术。例如,在虚拟机内的一个或多个多线程进程的执行期间,控制系统可以周期性地获取虚拟机的线程转储。线程转储可以产生在虚拟机中执行的每个线程的栈踪迹。对于接收到的每个栈踪迹,控制系统可以分析栈踪迹中包含的文本以对相关联的线程进行归类并基于栈踪迹更新针对所有线程类跟踪的强度统计信息。
除了对线程进行归类之外,实施例可以在每当新栈段沿着先前归类的栈段在分支点处出现时对新栈段进行归类。当控制系统在发现任何线程类之前观察到第一栈踪迹时,控制系统可以认为该栈踪迹内的栈帧的整个序列是线性连接的,因为到目前为止栈帧的整个序列仅一起出现。作为响应,控制系统可以初始化线程类以对整个栈踪迹(即,栈帧的整个序列)进行归类。当控制系统观察到包括不同栈帧序列的后续栈踪迹时,控制系统可以初始化附加线程类以对栈帧的每个唯一排列进行归类。在一些情况下,控制系统可能观察到不与先前观察到的栈踪迹共享任何栈帧(即,具有任何共同的栈帧)的栈踪迹。作为响应,控制系统可以初始化单独的线程类以对新的栈踪迹整体进行归类。
然而,更常见的是,控制系统可以观察到与先前观察到的栈踪迹共享一个或多个栈帧的栈踪迹。回到图1,例如,假设控制系统观察到的第一个栈踪迹是{(A,B,D)}(即,样本1或样本2中的栈踪迹),其中栈踪迹包含栈段A、B和D中包含的栈帧。控制系统可以初始化线程类{(A,B,D)}以对观察到的包括栈段A、B和D中所包含的栈帧的所有线程进行归类。接下来,假设控制系统观察到的第二个栈踪迹是{(A,C)}(即,样本6或样本7中的栈踪迹)。在这点上,控制系统可以确定虽然第一和第二栈踪迹不同,但是第一和第二栈踪迹共享栈段A中包含的所有栈帧,这导致栈段A处的分支点。作为响应,控制系统可以初始化线程类{(A,C})以对在其调用栈上包含栈段A和C的所有线程进行归类。
应该注意的是,因为栈段A中的栈帧已经被观察到与栈段(B,D)中的栈帧分离,因此栈段A和(B,D)不再被控制器系统认为是线性连接的。然而,控制系统仍然认为栈段A中的栈帧是线性连接的,并且栈段(B,D)中的栈帧是线性连接的。在这点上,控制系统可以初始化线程类{(A,B,D)}和线程类{(A,C)}的若干线程段组成部分,以对由新发现的分支点形成的新栈段进行归类。具体而言,控制系统可以初始化线程段(A)、线程段(B,D)和线程段(C),其中线程段(A)和(B,D)是线程类{(A,B,D})的组成部分并且线程段(A)和(C)是线程类{(A,C)}的组成部分。
一些实施例可以使用归类签名来表示栈踪迹和栈段。具体而言,踪迹签名可以用于表示特定线程类的栈踪迹,并且段签名可以用于表示特定线程段的栈段。每个踪迹签名可以与经由合成和分析进程建立的标记二叉树的元组对应。同时,线程段的每个段签名可以与元组中的节点对应,该节点与线程段是其组成部分的线程类对应。稍后在分析进程中,元组可以像解析树一样使用(例如,作为产生式文法(production grammar)的一部分),以辨别传入的栈踪迹。
回到上面的示例,在观察第一栈踪迹之后但在观察第二栈踪迹之前,线程类{(A,B,D})可以与单个二叉树的元组对应。因为第一栈踪迹内的整个帧序列被认为是单个栈段,因此单个二叉树可以包括表示栈段(A,B,D)的单个根节点。在观察第二栈踪迹之后,元组可能仍然仅包括单个二叉树。然而,二叉树现在可以包括三个单独的节点:表示栈段(A,B,D)的根节点、根节点的表示栈段(A)的第一子节点,以及根节点的表示栈段(B,D)的第二子节点。下面参考图4-图6进一步详细讨论合成踪迹签名和段签名的过程。
二叉树中的每个节点可以由标签或标识符唯一地识别,该标签或标识符可以被称为紧凑代码(compact code)。在一些实施例中,特定线程类的线程可以由一个或多个紧凑代码表示,该一个或多个紧凑代码识别与线程类对应的每个排名靠前的元组节点。以类似于霍夫曼编码或其它熵编码方案的方式,一些实施例可以将较短的元组与更流行(即,具有较高线程强度)和/或被首先发现的线程类相关联。因此,更常见类型的线程可以由更短的紧凑代码序列紧凑地表示。在一些实施例中,可以通过首先在离线分析(即,离线处理)中分析栈踪迹的概率分布并且以频率的降序将栈踪迹馈送到控制系统来确保这一点。
在不依赖于离线分析的实施例中,控制系统可以以从一个或多个虚拟机周期性地获取的线程转储的顺序来接收栈踪迹(即,在线处理)。
观察到不同类型的栈踪迹的次序可能受到每种类型的栈踪迹的强度的影响。换句话说,具有更高强度的栈踪迹在统计上更可能在序列中更早地被观察到。因此,这样的实施例可以假设(1)特定线程类的线程强度表示相关联的栈踪迹的发生概率,以及(2)在与较低强度线程类相关联的栈踪迹之前经常观察到与较高强度线程类相关联的栈踪迹。在这点上,控制系统将自然地为最高强度线程导出最紧凑的表示。因此,通过依赖于线程强度统计信息而不是离线处理,一些实施例可以为响应于一系列线程转储而观察到的栈踪迹提供最佳压缩算法。
A.线程强度的季节性
对于识别出的每个线程类,一些实施例可以估计线程类的强度的季节性趋势。如上所述,线程类或线程段的强度可以指由相关联的栈踪迹或栈段引用的代码块的“热度”的统计度量。代码块的热度可以通过代码块的调用次数乘以代码块的执行时间来量化。线程类的单个原始线程强度度量可以是该线程类在特定线程转储中的线程数量的计数。每个线程转储的平均线程强度度量可以与线程类型的流量强度、供应的负载或队列长度对应。对于平均遍历性进程,Little公式可以将预期强度(在与预期响应时间对应的采样间隔期间的预期到达数量)与预期响应时间和到达率λ相关联,如下所示:
在一些实施例中,季节性趋势分析进程可以使用可变过滤器参数来考虑不规则的采样间隔(例如,对堆使用量进行采样和/或获取线程转储)并且克服柯西(Cauchy)分布问题。该进程还可以支持以不同长度(例如,1天、2天)顺序地过滤多种类型的时段(例如,工作日时段、周末时段和假日时段)。此外,该进程可以根据季节性调整进行线程转储的速率以减少开销,同时维持基于线程转储确定的线程强度统计信息的特定置信水平。在一些情况下,调整线程转储速率还可以最小化需要通过网络(例如,LAN、互联网)传输到其它机器(例如,大数据存储库)以进行离线处理的线程转储数据的体量。
在一些实施例中,季节性趋势分析进程可以将工作日时段(即,24小时时段)划分为96个十五分钟的间隔,这为每个工作日时段产生96个季节索引(即,季节)。该进程可以将周末时段(即,48小时时段)划分为192个15分钟的间隔,这为每个周末时段产生192个季节索引。在接收到特定长度的数据集(例如,记录其中包括一个或两个周末的10天内的线程转储或堆使用量的时间系列)时,该进程可以将多时段趋势分析过滤器单独应用于工作日时段和周末时段,以便分离出在单个工作日观察到的季节模式和在整个周末观察到的季节模式,从而产生每个工作日的96个季节索引的一组96个季节因子和每个周末的192个季节索引的一组192个季节因子。然后,该进程可以将工作日季节因子和周末季节因子重新归一化,使得季节因子“1”表示工作日时段和周末时段的公共参考水平。
应该注意的是,如果将大于1的季节因子指派给季节索引,则该季节索引与该时段的其余部分相比具有高于平均值的值。另一方面,如果将小于1的季节因子指派给季节索引,则与该时段的其余部分相比,该季节索引具有低于平均值的值。例如,如果与9AM-9:15间隔对应的季节索引的特定线程类的线程强度的季节因子是1.3,则该特定线程类在9AM–9:15AM间隔期间的平均线程强度间隔比该特定线程类在整个工作日的平均线程强度高30%。
在一些实施例中,季节性趋势分析进程可以将假日(例如,劳动节、圣诞节)分离出来作为以每12个月一次的频率重复的单独时段,而工作日时段以每24小时进行重复并且周末时段以每5天或7天进行重复。这样的假日时段的一组季节因子可以与工作日时段和周末时段的那些季节因子一起进行重新归一化,使得季节因子1表示所有时段的公共参考水平。根据需要,每个时段的其它频率也可能是适当的。作为示例,假日可以以每6个月(等等)的频率分开,而工作日可以是每12小时(等等)重复的时段。
在一些实施例中,确定和跟踪强度统计信息还可以包括预测未来值和变化速率。然而,采样间隔可以是不规则的,甚至可以变得任意接近于零。在采样间隔变得任意接近于零的情况下,变化速率可能成为柯西分布的随机变量,其均值和标准差是不确定的。为了克服关于利用自适应采样间隔确定季节性趋势的柯西分布问题,一些实施例可以采用各种适配,如Holt的双指数过滤器、Winter的三指数过滤器、Wright的不规则时间间隔的扩展、Hanzak的用于时间相近间隔的调整因子、异常值检测,以及具有异常值截止的自适应缩放的削波。可以将这五组指数过滤器顺序地应用于数据集,以估计工作日时段和周末时段的季节因子的集合。
B.归类签名和压缩方案
某些实施例可以向线程的栈踪迹指派可变长度的紧凑代码序列,其中序列的长度取决于线程的强度。示例性栈踪迹如下表示:
oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:991)
oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1285)
…
oracle.mds.core.MetadataObject.getBaseMO(MetadataObject.java:1048)
oracle.mds.core.MDSSession.getBaseMO(MDSSession.java:2769)
oracle.mds.core.MDSSession.getMetadataObject(MDSSession.java:1188)
…
oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:150)
…
oracle.apps.setup.taskListManager.ui.customization.CustomizationFilter.doFilter(CustomizationFilter.iava:46)
…
weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2209)
weblogic.servlet.internal.ServletRequestImpl.mn(ServletRequestImpl.java:1457)
…
weblogic.work.ExecuteThread.execute(ExecuteThread.java:250)
weblogic.work.ExecuteThread.run(ExecuteThread.java:213)
在示例性栈踪迹中,Java数据库连接(JDBC)驱动程序栈段(即,各自包括“oracle.jdbc.driver...”的两个栈帧)下面的栈帧“oracle mds core MetadataObjectgetBaseMO”指示元数据服务(MDS)库调用与该JDBC栈段对应的JDBC操作。MDS库栈段(即,各自包括“oracle.mds...”的三个栈帧)下面的栈帧“oracle adf model servletADFBindingFilter doFilter”指示应用开发框架(ADF)操作调用MDS操作。如栈踪迹底部的WebLogic栈段(即,各自包括“weblogic...”的四个栈帧)所示,ADF操作通过超文本传输协议(HTTP)Servlet请求来调用。
作为示例,可以使用两级霍夫曼编码方案来编码和压缩上述栈踪迹,从而产生表示示例性栈踪迹的紧凑代码序列。在第一级,压缩工具(例如,gzip)可以检测栈踪迹中的子串,诸如“ServletRequestImpl.java”和“weblogic.servlet.internal.ServletRequestImpl.run”,并根据这些子串出现在栈踪迹中的频率来导出用于这些子串的霍夫曼编码。为了增加压缩比,可以为较频繁出现的子串指派较短的霍夫曼编码。在第一级压缩之后,压缩后的栈踪迹可以包括作为元数据的编码字典,该编码字典可以用于根据霍夫曼编码恢复子串。
第二级可以涉及通过用段签名替换栈踪迹的栈段来将另一级压缩应用于压缩后的栈踪迹。下面关于图4-6更详细地讨论应用第二级压缩的步骤。
C.示例性数据结构
可以经由一个或多个对象类型在存储器中表示归类签名。具体而言,一些实施例可以使用ThreadClassificationInfo对象来表示线程类的归类签名(即,踪迹签名)、使用SegmentInfo对象来表示线程段的归类签名(即,段签名)、使用StackFrameInfo对象来表示栈段内线性连接的栈帧中的每个元素,以及使用SeasonalTrendInfo对象来封装和跟踪线程类或线程段的强度统计信息。
下面提供了定义ThreadClassificationInfo对象、SegmentInfo对象、StackFrameInfo对象和SeasonalTrendInfo对象的示例性类/接口定义:
从以上定义中可以看出,每个ThreadClassificationInfo对象、SegmentInfo对象和StackFrameInfo对象包括唯一标识符(即,id)、名称、跟踪相同类型的对象(例如,相同的线程类、相同的线程段、相同类型的栈帧)在最新的线程转储中被观察到的次数的计数器(即,numOfOccur),以及跟踪相同类型的对象在所有线程转储中被观察到的次数的另一个计数器。
ThreadClassificationInfo对象可以包括SegmentInfo对象的列表和SeasonalTrendInfo对象。在这点上,ThreadClassificationInfo可以与二叉树的元组对应,而SegmentInfo对象的列表与构成二叉树的节点对应。SeasonalTrendInfo对象可以记录与由ThreadClassificationInfo对象表示的线程类有关的强度统计信息(例如,过滤器状态)。
SegmentInfo对象可以包括StackFrameInfo对象的列表、第一子SegmentInfo对象(即,firstSegment)、第二子SegmentInfo对象(即,secondSegment)、合并(即,父)SegmentInfo对象(即,coalescingSegment)、前面同级SegmentInfo对象(即,前驱)的列表、后继同级SegmentInfo对象(即,后继者)的列表,以及SeasonalTrendInfo对象。在这点上,SegmentInfo对象可以与栈段对应。如果SegmentInfo对象与叶节点对应,则StackFrameInfo对象的列表可以与栈段中包括的线性连接的栈帧对应。如果SegmentInfo对象与分支点相邻,则同级SegmentInfo对象可以与分支点的相对侧上的栈段对应,而合并SegmentInfo对象可以与包括栈段和同级栈段的父栈段对应。如果SegmentInfo对象不与叶节点对应,则子SegmentInfo对象可以与在栈段中发现分支点时创建的栈段的子段对应。SeasonalTrendInfo对象可以记录与由SegmentInfo对象表示的线程段有关的强度统计信息。
一些实施例可以通过将与单个SegmentInfo节点一起观察到的StackFrameInfo对象的列表相关联来对栈踪迹的栈段进行归类。换句话说,SegmentInfo节点是栈段的每个StackFrameInfo对象的合并节点。每个StackFrameInfo对象可以具有单个合并的SegmentInfo节点。当沿着SegmentInfo节点的线性连接的StackFrameInfo对象的某处检测到分支点时,一些实施例可以创建两个新的SegmentInfo节点并将线性连接的StackFrameInfo对象分割成新的SegmentInfo节点当中的两组线性连接的StackFrameInfo对象。然后,它可以通过分支点重新连接两个StackFrameInfo对象。
新SegmentInfo节点中的每一个都成为该节点的部分段中的StackFrameInfo对象的合并节点。某些实施例可以相应地更新StackFrameInfo对象的coalescingSegment,使得每个StackFrameInfo对象引用正确的合并SegmentInfo节点。两个新的SegmentInfo节点被表示为左同级节点和右同级节点。这两个新的SegmentInfo节点也成为原始SegmentInfo节点的子节点,而原始SegmentInfo节点又成为它们的父节点。父SegmentInfo节点可以成为这两个新SegmentInfo节点的合并节点。
响应于发现的分支点而分割栈段的进程可以导致由SegmentInfo节点组成的二叉树结构。该分割进程可以被看作是线程类(即,栈踪迹类)分叉成线程子类。随着栈段中的各个栈帧的强度随时间而偏离,一些实施例可以连续地将栈段分割成更小的栈段,从而使得能够下挖线程类层次结构以观察线程类的强度如何可以被按比例归因于线程子类的强度。
在一些实施例中,二叉树内部的SegmentInfo节点是父节点,其StackFrameInfo对象并非全部是线性连接的,因为一些栈帧通过分支点连接。作为对照,叶SegmentInfo节点的StackFrameInfo对象可以是线性连接的。在SegmentInfo节点内,线性连接或分支点连接的StackFrameInfo对象可以被定向为具有底部StackFrameInfo和顶部StackFrameInfo的栈。按照惯例,左同级SegmentInfo节点中的顶部StackFrameInfo对象可以通过分支点连接到右同级SegmentInfo节点的底部StackFrameInfo对象。
每个SegmentInfo节点可以包括SeasonalTrendInfo对象,以跟踪由该SegmentInfo节点表示的线程(子)类的强度统计信息。当将SegmentInfo节点分割成两个新的子SegmentInfo节点时,一些实施例可以将SegmentInfo节点的SeasonalTrendInfo对象克隆到两个新的SeasonalTrendInfo对象中,并在每个子SegmentInfo节点中设置一个SeasonalTrendInfo对象。
一些实施例提供了通过分割进程将父SegmentInfo节点的过滤器状态复制到新的子SegmentInfo节点的能力。在这样做时,一些实施例可以连续跟踪强度统计信息在该父节点和同级SegmentInfo节点之间的比率。具体而言,子SegmentInfo节点的强度统计信息初始地每个都与父SegmentInfo节点的强度统计信息相同。然而,当获得新样本时,子SegmentInfo节点的强度统计信息可能开始偏离父节点和彼此的强度统计信息。随着新栈段的过滤器状态被分别更新,新栈段的过滤器状态开始彼此发生偏差并且与原始栈段的过滤器状态发生偏差。
在一些情况下,父SegmentInfo节点和同级SegmentInfo节点之间的强度统计信息可以随时间收敛到某个比率。一些实施例可以应用SegmentInfo节点之间的父子关系和同级关系来定义多变量状态估计技术的相关模型。具体而言,如果进程是平稳的,则相关的SegmentInfo节点之间的强度统计信息的比率可以收敛到平稳状态。具体而言,如果进程是严格意义上或广义上平稳的,那么第一和第二时刻的强度统计信息在相关的SegmentInfo节点之间的联合概率分布(其可以包括相关的SegmentInfo节点的均值、方差、自协方差和互协方差)可能不会相对于时间而变化。因此,可以预期强度统计信息在父SegmentInfo节点和同级SegmentInfo节点之间的比率随时间收敛。因此,通过经由分支点连续跟踪同级SegmentInfo节点的强度统计信息并且确定父SegmentInfo节点和同级SegmentInfo节点之间的强度统计信息的比率随时间收敛,一些实施例可以使用这些比率来定义用于多变量状态估计技术的相关模型。结果得到的模型可以用于异常检测和生成预测。
StackFrameInfo对象可以包括一个或多个前驱StackFrameInfo对象和/或一个或多个后继StackFrameInfo对象(即,前驱和后继者)、合并SegmentInfo对象(即,coalescingSegment),以及识别由StackFrameInfo对象引用的代码的信息(即classMethodLineNumber)。如果StackFrameInfo对象不与分支点相邻,则StackFrameInfo对象可以线性连接到单个前驱栈帧和单个后继者栈帧。StackFrameInfo对象可以通过成员变量coalescingSegment来引用进行包含的SegmentInfo对象。
当该处理最新的线程转储时,每个ThreadClassificationInfo对象、SegmentInfo对象和StackFrameInfo对象的成员变量numOfOccur可以被重置为0。从线程转储获得的每个栈踪迹可以从栈踪迹的底部向顶部进行解析。在应用第一级别的霍夫曼编码方案以压缩栈踪迹之后,可以将栈踪迹的每一行解析为StackFrameInfo对象。在将StackFrameInfo对象的列表解析为SegmentInfo对象的列表之后,一些实施例可以尝试将SegmentInfo对象的列表匹配到包含SegmentInfo对象的匹配列表的ThreadClassificationInfo对象。如果不存在这样的ThreadClassificationInfo对象,则一些实施例可以注册新的ThreadClassificationInfo对象以表示SegmentInfo对象的列表。之后,一些实施例然后可以更新匹配的/新的ThreadClassificationInfo对象以及匹配的/新的ThreadClassificationInfo对象中的每个SegmentInfo对象和StackFrameInfo对象的numOfOccur和totalNumOfOccur成员变量。注意的是,如果SegmentInfo节点是叶级节点,则该节点的numOfOccur成员变量将等于该SegmentInfo节点中每个StackFrameInfo元素的numOfOccur成员变量。
接下来,一些实施例可以更新封装在相关联的SeasonalTrendInfo对象中的强度统计度量。具体而言,一些实施例可以通过将rawMeasure设置为进行包含的ThreadClassificationInfo对象或SegmentInfo对象的numOfOccur成员变量来更新每个SeasonalTrendInfo对象中的rawMeasure成员变量。注意的是,在一些实施例中,rawMeasure可以仅在每N个线程转储时更新,在这种情况下,SeasonalTrendInfo对象的rawMeasure被设置为对应的numOfOccur除以N。在一些实施例中,这样的实施例可以仅当相关联的ThreadClassificationInfo对象或相关联的SegmentInfo对象的numOfOccur成员变量不为零时才更新SeasonalTrendInfo对象的rawMeasure成员变量。如果numOfOccur成员变量不为零,则SeasonalTrendInfo对象的rawMeasure被设置为numOfOccur的值除以N,其中N是自上次更新rawMeasure以来线程转储的数量。在这样的实施例中,该方法将numOfOccur为零时的情况处理为就好像没有可用的测量值一样。在这点上,当没有可用的测量时,rawMeasure不会被更新。换句话说,这些实施例跟踪自上次更新rawMeasure以来线程转储的数量‘N’。线程强度测量值可以与不规则的时间系列对应。应该注意的是,不规则时间间隔的指数过滤器(例如,上面公开的Holt的双指数过滤器和Winter的三指数过滤器)可以有效地过滤rawMeasure从而从以不规则的时间间隔获取的一组测量值中获得去季节化的度量和季节因子。
应该注意的是,每个SeasonalTrendInfo对象可以包括由被应用于以下每个统计测量值的五组指数过滤器生成的时间系列数据:线程强度的原始度量、线程强度正在增加或减小的速率、该速率的加速度或减速度、线程强度的季节因子、以及残余分量。在SeasonalTrendInfo对象内,用于变量的五组指数过滤器的状态、过滤器常数、(用于调整样本之间的不规则时间间隔的)过滤器参数调整权重因子、以及过滤器参数可以由该时间系列数据来表示。
D.示例性归类签名的生成
图3描绘了根据一些实施例的虚拟机300在一段时间内的示例性线程转储。与图1中的100ms至1秒采样间隔的运行时剖析相比,由图3中的控制系统采用的采样间隔可以更长(例如,在20秒和1分钟之间)以减少采样开销。如图3所示,在两到三个采样间隔内,在虚拟机300内执行的进程产生线程302、304、306、308、310和312。线程302-312中的每一个在执行时与单独的调用栈相关联,并且因此可以在获取线程转储时产生栈踪迹。图3描绘了总共三个线程转储被获取:线程转储N、线程转储N+1和线程转储N+2。
图3示出了在三次连续的线程转储中按顺序(A,B,D)、(A,B,D)、(A,C)和(A,B,E)观察到的三种不同类型的栈踪迹。栈踪迹(A,B,D)被观察到两次。在获取线程转储N之前,线程302被产生并开始执行。当获取线程转储N时,观察到线程302的栈踪迹(A,B,D)。应该注意的是,即使栈段A、栈段B和栈段D尚未被识别出,但是为了方便起见,在图3中描绘的整个示例中,将使用这些栈段的名称。随着在获取线程转储N之后经过一个采样间隔,线程302结束,线程304被产生并且线程304在从未在线程306和308被产生的同时被采样的情况下结束。当获取线程转储N+1时,线程308产生栈踪迹(A,B,D),而线程310产生栈踪迹(A,C)。随着在获取线程转储N+1之后经过另一个采样间隔,线程306和308结束,线程310被产生且在从未被采样的情况下结束,并且线程312被产生。当获取线程转储N+2时,线程312产生栈踪迹(A,B,E)。如从图3中可以看到的,(A,B,D)线程类型是将被观察到的第一种线程类型,并且(A,B,D)线程类型具有高于(A,C)或(A,B,E)线程类型的强度。
在线程转储N之后,控制系统可以将单个SegmentInfo(A,B,D)节点注册为栈踪迹(A,B,D)的归类签名。然后,控制系统可以将SeasonalTrendInfo(A,B,D)对象与SegmentInfo(A,B,D)节点相关联,并更新由该节点封装的状态:
SegmentInfo(A,B,D).numOfOccur=1.
SegmentInfo(A,B,D).totalNumOfOccur=1.
图4描绘了一组归类签名400,其包括响应于栈踪迹(A,B,D)而已注册的单个归类签名450。如图4中可以看到的,归类签名450包括与SegmentInfo(A,B,D)对应的单个节点402,其中SegmentInfo(A,B,D)被示出为是栈踪迹的所有栈帧a1-d3的合并节点。
当在线程转储N+1中再次观察到栈踪迹(A,B,D)时,控制系统可以如下更新SegmentInfo(A,B,D)节点:
SegmentInfo(A,B,D).numOfOccur=1.
SegmentInfo(A,B,D).totalNumOfOccur=2.
当在线程转储N+1中第一次观察到栈踪迹(A,C)时,控制系统确定栈段(A,B,D)内的整个栈帧集合不再是线性连接的。现在,在栈帧集合的由'A'表示的(例如,从栈踪迹的顶部到底部)最后一个栈帧和该栈帧集合的由'B,D'表示的第一栈帧之间存在分支点,因为,在任何给定的栈踪迹中,最后一个栈帧之后的下一个栈帧可以是(1)(B,D)的第一个栈帧,或者(2)栈帧集合中的由'C'表示的第一个栈帧。因此,控制系统可以通过创建节点SegmentInfo(A)和SegmentInfo(B,D)并将这两个节点指派为SegmentInfo(A,B,D)的子节点来将栈段(A,B,D)分割成栈段(A)和栈段(B,D)。对于栈踪迹(A,C),控制系统可以通过创建节点SegmentInfo(C)来初始化栈段(C)并且注册包括SegmentInfo(A)和SegmentInfo(C)的有序元组作为栈踪迹(A,C)的归类签名。
在一些实施例中,控制系统可以将SeasonalTrendInfo(A,B,D)对象分别克隆到节点SegmentInfo(A)和SegmentInfo(B,D)的SeasonalTrendInfo(A)和SeasonalTrendInfo(B,D)对象中,并且为SegmentInfo(C)创建新的SeasonalTrendInfo(C),如下所示:
SeasonalTrendInfo(A)←SeasonalTrendInfo(A,B,D)
SeasonalTrendInfo(B,D)←SeasonalTrendInfo(A,B,D)
SeasonalTrendInfo(C)←new SeasonalTrendInfo
控制系统还可以如下更新上述SegmentInfo节点:
SegmentInfo(A).numOfOccur=2
SegmentInfo(A).totalNumOfOccur=3
SegmentInfo(C).numOfOccur=1
SegmentInfo(C).totalNumOfOccur=1
图5描绘了一组归类签名500,其包括归类签名450和响应于第一次观察到栈踪迹(A,C)而生成的新归类签名550。如从图5中可以看到的,归类签名450现在包括三个节点:节点402、节点502和节点504。节点402与SegmentInfo(A,B,D)对应,它是节点502和节点的合并节点。节点502与SegmentInfo(A)对应,其合并栈帧a1-a3。节点504与SegmentInfo(B,D)对应,其合并栈帧b1-d3。归类签名550包括两个节点:与被示出为合并栈帧a1-a3的SegmentInfo(A)对应的节点506,以及与被示出为合并栈帧c1-c3的SegmentInfo(C)对应的节点508。
当在线程转储N+2中第一次观察到栈踪迹(A,B,E)时,控制系统确定栈段(B,D)内的整个栈帧集合不再是线性连接的。现在,在栈帧集合的由'B'表示的最后一个栈帧和栈帧集合的由'D'表示的第一个栈帧之间存在分支点,因为,在任何给定的栈踪迹中,最后一个栈帧之后的下一个栈帧可以是(1)(D)的第一个栈帧,或者(2)栈帧集合的由'E'表示的第一个栈帧。因此,控制系统可以通过创建节点SegmentInfo(B)和SegmentInfo(D)并将这两个节点指派为SegmentInfo(B,D)的子节点来将栈段(B,D)分割成栈段(B)和栈段(D)。对于栈踪迹(A,B,E),控制系统可以通过创建节点SegmentInfo(E)来初始化栈段'E'并且注册包括SegmentInfo(A),SegmentInfo(B)和SegmentInfo(E)的有序元组作为栈踪迹(A,B,E)的归类签名。
在一些实施例中,控制系统可以将SeasonalTrendInfo(B,D)对象分别克隆到节点SegmentInfo(B)和SegmentInfo(D)的SeasonalTrendInfo(B)和SeasonalTrendInfo(D)对象中,并为SegmentInfo(E)创建新的SeasonalTrendInfo(E),如下:
SeasonalTrendInfo(B)←SeasonalTrendInfo(B,D)
SeasonalTrendInfo(D)←SeasonalTrendInfo(B,D)
SeasonalTrendInfo(E)←new SeasonalTrendInfo
控制系统还可以如下更新上述SegmentInfo节点:
SegmentInfo(A).numOfOccur=1
SegmentInfo(A).totalNumOfOccur=4
SegmentInfo(B).numOfOccur=1
SegmentInfo(B).totalNumOfOccur=3
SegmentInfo(E).numOfOccur=1
SegmentInfo(E).totalNumOfOccur=1
图6描绘了一组归类签名600,其包括归类签名450和550以及响应于栈踪迹(A,B,E)而生成的新归类签名650。如图6中可以看到的,归类签名450现在包括五个节点:节点402、节点502、节点504、节点602和节点604。节点504与SegmentInfo(B,D)对应,它是节点602和节点604的合并节点。节点602与SegmentInfo(B)对应,它合并栈帧b1-b3。节点604与SegmentInfo(D)对应,它是栈帧d1-d3的合并节点。归类签名550没有改变。归类签名650包括三个节点:与被示出为合并栈帧a1-a3的SegmentInfo(A)对应的节点606、与被示出为合并栈帧b1-b3的SegmentInfo(B)对应的节点608,以及与被示出为合并栈帧e1-e3的SegmentInfo(E)对应的节点610。
如图6所示,栈踪迹(A,B,D)的归类签名可以由归类签名450的根处的单个SegmentInfo节点组成。换句话说,作为最高强度栈踪迹的栈踪迹(A,B,D)具有最紧凑的表示。同时,栈踪迹(A,C)被指派具有两个有序节点(A)和(C)的第二短的归类签名。最后检测到的栈踪迹(A,B,E)被指派具有三个有序节点(A)、(B)和(E)的第三短的归类签名。如图4-图6所示,ThreadClassificationInfo对象可以与SegmentInfo节点的元组对应,并且SegmentInfo节点可以引用其它SegmentInfo节点和/或StackFrameInfo对象集合的二叉树(或二进制的子树)。ThreadClassificationInfo对象、SegmentInfo节点和StackFrameInfo对象可以一起构成产生式文法:
Thread1->(A,B,D)
Thread2->(A)(C)
Thread3->(A)(B)(E)
(A,B,D)->(A)(B,D)
(B,D)->(B)(D)
A->a1,a2,a3
B->b1,b2,b3
C->c1,c2,c3
D->d1,d2,d3
E->e1,e2,e3
如上所述,各个栈帧ai,bi,ci,di,ei是终端,而SegmentInfo节点是文法的非终端。一些实施例可以从栈踪迹的底部向栈踪迹的顶部(在以下表示中定向为从左到右)来解析栈踪迹的栈帧。
a1,a2,a3,b1,b2,b3,d1,d2,d3
(A),b1,b2,b3,d1,d2,d3 use production(A)->a1,a2,a3
(A),(B),d1,d2,d3 use production(B)->b1,b2,b3
(A),(B),(D) use production(D)->d1,d2,d3
(A),(B,D) use production(B,D)->(B)(D)
(A,B,D) use production(A,B,D)->(A),(B,D)
Thread1 use production Thread1->(A,B,D)
如以上可以看到的,一些实施例可以经由自下而上的语法分析来分析栈帧,其可以类似于移位减少解析(shift-reduce parsing)或从左到右的“LR”解析。该分析可以涉及移位和减少栈帧和SegmentInfo节点,以通过从树的叶子到根进行操作来为栈踪迹构造解析树。一些实施例可以针对线程的栈踪迹的较早的出现(occurrence)来合成解析树,并通过减少(即,移位减少解析、从左到右的“LR”解析)来对同一解析树分析线程的另一出现的栈踪迹。归类树的每个节点可以是用于栈踪迹类的紧凑标签,并且归类树的根可以是用于线程类的紧凑标签。
图7图示了根据一些实施例的用于响应于线程转储而生成和/或修改一个或多个线程归类签名的过程的流程图700。在一些实施例中,流程图700中描绘的过程可以由具有一个或多个处理器(例如,图17的计算机系统1700)的计算机系统来实现,其中该一个或多个处理器可以基于存储在计算机可读介质中的计算机代码来执行这些步骤。图7中描述的步骤可以以任何顺序执行,并且可以有或没有任何其它步骤。
流程图700开始于步骤702,其中实施例在多线程程序的执行期间执行线程转储。具体而言,一些实施例可以与监视多线程程序在其中执行的软件执行环境的一个或多个监视进程对应。该软件执行环境可以支持包括多线程程序的多个多线程进程。在一些情况下,软件执行环境可以是支持线程转储的获取的虚拟机。在一些实施例中,一个或多个监视进程可以在多线程程序旁边的虚拟机内执行。在一些实施例中,一个或多个监视进程可以在同一组机器上或在不同组机器上与虚拟机分开执行。一个或多个监视进程可以周期性地发起虚拟机的线程转储。对于特定的线程转储,可以为在获取该特定的线程转储时代表多线程程序执行(例如,由多线程程序产生)的每个线程获得栈踪迹。
在步骤704处,实施例接收在线程转储期间正在执行的每个线程的栈踪迹。特定线程的栈踪迹可以与描述该线程的调用栈的一行或多行文本对应。栈踪迹内的每一行与线程的调用栈上的特定栈帧对应,并且可以描述与该栈帧相关联的代码块。在一些实施例中,栈帧可以包括源代码文件和指向代码块的行号以及与代码块相关联的类名和/或方法名。
在决策706处,实施例确定是否需要分析另一个栈踪迹。如果不需要,则流程图在步骤716处结束。具体而言,一旦已通过一个或多个监视进程分析了线程转储的所有栈踪迹,一些实施例就可以更新由存储器中的一个或多个对象封装的强度统计信息。例如,可以基于从线程转储获得哪种栈踪迹来更新一个或多个SeasonalTrendInfo对象的成员变量(例如,rawMeasure、rawDeseasonalizedMeasure、smoothedWeekdaySeasonalFactor和/或smoothedWeekendSeasonalFactor)。
否则,在步骤708处,实施例确定现有的踪迹签名是否表示栈踪迹所包括的栈帧序列。具体而言,一些实施例可以使用已基于从先前的线程转储接收到的栈帧建立的现有的一组归类签名作为产生式文法,以确定栈帧的序列是否可以由现有签名之一来表示。这可能涉及一个或多个移位减少操作,其中栈踪迹的部分被折叠到叶子SegmentInfo节点中,并且SegmentInfo节点本身被折叠到合并节点中。如果移位减少操作导致被注册为归类签名的有序元组,则该归类签名表示栈踪迹所包括的栈帧序列。
在决策710处,如果存在这样的踪迹(即,归类)签名,则流程图前进到步骤714。否则,在步骤712处,实施例生成新的踪迹签名,该新的踪迹签名表示由栈踪迹包括的栈帧的序列。换句话说,已经发现了曾被认为是线性连接的一组栈帧内的分支点。然后,一些实施例可以生成一个或多个SegmentInfo节点、修改一个或多个二叉树和/或修改一个或多个有序元组以生成新的归类签名,该新的归类签名表示由栈踪迹包括的一组(先前)线性连接的栈帧。下面关于图8更详细地描述生成新的归类签名的技术。
在步骤714处,实施例在返回到决策706之前递增与踪迹签名相关联的计数器。具体而言,作为ThreadClassificationInfo对象、SegmentInfo对象和/或StackFrameInfo对象的成员的某些计数器(例如,numOfOccur和/或totalNumOfOccur)可以被递增以在接收和发现它们时按类型跟踪栈踪迹、栈段和栈帧的数量。
图8图示了根据一些实施例的用于响应于检测到分支点而生成或修改线程归类签名的过程的流程图800。在一些实施例中,流程图800中描绘的过程可以由具有一个或多个处理器(例如,图17的计算机系统1700)的计算机系统来实现,其中该一个或多个处理器可以基于存储在计算机可读介质中的计算机代码来执行步骤。图8中描述的步骤可以以任何顺序执行,并且可以有或没有任何其它步骤。
流程图800开始于步骤802,其中实施例确定先前是否已生成一个或多个SegmentInfo节点。如果是这样,则流程图前进到步骤804。否则,流程图前进到步骤814。除非当前正在分析的栈踪迹是为数据集接收到的第一个栈踪迹,否则该组归类签名将可能包含为之前的栈踪迹先前生成的一个或多个归类签名,其中这些归类签名包括SegmentInfo节点。由于从同一进程接收到的栈踪迹类型可能彼此共享栈段,因此第一次接收到的任何类型的栈踪迹都将可能导致发现分支点。
在步骤804处,实施例确定栈踪迹所包括的栈帧序列中包括的、不由任何先前生成的节点表示的栈帧的一个或多个子序列。具体而言,一些实施例可以在尝试通过一系列移位减少操作来压缩由栈踪迹包含的栈帧序列时查阅现有的归类签名和SegmentInfo节点。可以将不能被减少的序列的栈帧的任何子序列确定为新类型的栈段。在这种情况下,一些实施例可以确定需要生成表示该新类型的栈段的SegmentInfo节点。
在步骤806,实施例生成一个或多个附加节点以表示栈帧的一个或多个子序列。具体而言,可以为新类型的栈段中包括的每个栈帧生成新的StackFrameInfo对象。可以生成与新类型的栈段对应的新的SegmentInfo节点,其中该新的SegmentInfo节点引用新的StackFrameInfo对象中的每一个。
在步骤808处,实施例将一个或多个附加节点中的至少一个并入到一个或多个先前生成的元组的一个或多个先前生成的二叉树中。可以修改和/或扩展一个或多个现有归类签名的一个或多个二叉树以考虑新发现的分支点。在由新分支点分割由现有二叉树的叶SegmentInfo节点表示的栈段的情况下,该叶节点可以成为两个新叶SegmentInfo节点的合并节点。
在步骤810处,实施例生成一个或多个附加二叉树,其中一个或多个二叉树中的至少一个或多个包括一个或多个附加节点中的至少一个。在许多情况下,该一个或多个附加二叉树可以是具有单个节点的单级树。新生成的二叉树之一可以包括在步骤806中生成的新SegmentInfo节点。
在步骤812处,实施例生成包括一个或多个附加二叉树的附加元组以表示栈踪迹。该附加元组可以与表示新发现的栈踪迹类型的归类签名对应。一些元组可以是有序的单级二叉树集合,每个二叉树包含单个节点,并且可以看起来类似于节点列表。其它元组可以与单个多级二叉树对应。还有的其它元组可以包括组合的单级二叉树和多级二叉树。通常,随着发现越来越多类型的栈踪迹,生成的每个后续归类签名可能与越来越长的有序元组对应。然而,由于更可能首先遇到常见类型的栈踪迹,因此较长的归类签名更可能表示不常发生的栈踪迹。这可以确保将更高百分比的栈踪迹压缩成更短的归类签名。在步骤812之后,流程图在步骤820处结束。
在步骤814处,实施例生成包括单个二叉树的元组,该单个二叉树包括表示栈踪迹的单个节点。由于未找到SegmentInfo节点,因此当前分析的栈踪迹可能是第一个。因此,一些实施例可以生成与仅具有一个SegmentInfo节点的单个二叉树对应的归类签名。在步骤814之后,流程图在步骤820处结束。将来一遇到不同类型的栈踪迹,就可以用新的SegmentInfo节点扩展二叉树以表示新遇到的分支点。
IV.以不规则的时间间隔进行堆使用量测量
一些实施例可以使控制系统监视堆分配的时间系列数据(即,堆使用量)以估计趋势并预测虚拟机内的将来存储器使用量。通过检测季节性趋势并预测存储器容量要求,一些实施例可以在虚拟机之间动态地重新分配共享的系统存储器,从而实现资源分配的弹性。容量要求的预测可能涉及对堆增长率的估计。为了确保样本准确性,可以在完全垃圾收集(GC)周期期间进行堆分配测量,这以不规则时间间隔发生。对堆增长率的估计可能涉及除以随机时间间隔,这由于间歇性地任意接近于零的不规则时间间隔而复杂化。增长率测量中的噪声是产生柯西分布的两个高斯(Gaussian)分布的比率,其可能难以过滤。该柯西分布的均值和标准差是不确定的,从某种意义上说,大量数据点不比单个数据点产生更准确的均值和标准差的估计。增加样本池可以增加遇到具有与除以时间相近的间隔对应的大绝对值的样本点的可能性。
应该注意的是,与由于完全GC周期的不规则性而导致其采样间隔不规则的堆大小测量不同,可以以规则间隔对线程强度测量进行采样以避免时间相近的间隔。即使如此,本文描述的用于堆分配的趋势分析的相同技术也可以应用于线程和栈段强度测量的季节性趋势分析和预测。在一些实施例中,该技术可以针对由于线程的CPU调度和完全GC周期的干扰所造成的可变延迟而调整。这些技术还可以针对由于对栈段进行归类所需的可变计算时间所造成的可变采样间隔进行调整。在线程转储中尚未观察到特定线程或栈段的情况下,一些实施例可能会将相关联的ThreadClassificationInfo对象或相关联的SegmentInfo对象的numOfOccur成员变量保留为零,这可以指示没有针对该特定线程或栈段的可用的测量。这样的实施例可能不更新SeasonalTrendInfo对象的rawMeasure变量。这样的实施例可以仅当相关联的ThreadClassificationInfo对象或相关联的SegmentInfo对象的numOfOccur成员变量不为零时,才更新SeasonalTrendInfo对象的rawMeasure成员变量。这些实施例可以跟踪自上次更新rawMeasure以来的线程转储的数量'N'。线程强度测量值可以与具有不规则时间间隔的系列对应。
1957年和1960年出版的Holt-Winter三指数过滤器可以用于季节性趋势分析和预测。发表于Office of Naval Research Memorandum,no.52(1957)由C.C.Holt所著的"Forecasting Trends and Seasonal by Exponentially Weighted Averages"通过引用并入本文。发表于Management Science,vol.6,no.3,p.324–342(1960)由P.R.Wright所著的"Forecasting Sales by Exponentially Weighted Moving Averages"通过引用并入本文。Wright在1986年扩展了Holt-Winter公式,以支持不规则的时间间隔。发表于ManagementScience,vol.32,no.4,pp.499-510(1986)由D.J.Wright所著的"Forecasting datapublished at irregular time intervals using an extension of Holt's method"通过引用并入本文。在2008年,Hanzak提出了用于时间接近的间隔的调整因子。发表于WDS'08Proceedings Part I,pp.62-67(2008)由T.Hanzak所著的“Improved Holt Method forIrregular Time Series”通过引用并入本文。
如果时间间隔在由存储器泄漏或死锁引起的拥塞期间单调减小,那么用于时间接近的间隔的调整因子(其意在补偿由于速率估计中的随机的时间接近的间隔引起的较高相对噪声强度)可能无意中抑制变化速率估计。完全GC算法的非线性或多项式时间复杂度会随着拥塞恶化而导致线程运行时间隔减少。在存储器泄漏的情况下,随着时间间隔减小,运行时间可能减少,但是测量时间可以增加,这是因为由于更频繁地执行完全GC,虚拟机可以被更长时间地冻结。如果虚拟机在完全GC期间被冻结,那么新请求可以在虚拟机外排队。这种积压(backlog)可以加速后续运行时期间堆使用量的变化速率。在一些实施例中,Hanzak对时间接近的间隔的调整被用于堆分配的趋势分析和预测以及跟踪加速的堆增长率。
在本发明的实施例中,Holt-Winter三指数过滤器可以应用于堆使用量的季节性趋势分析和预测,以有效地实现存储器分配的弹性。可以应用于规则时间系列的需求预测的标准Holt-Winter三指数过滤器可以进行特殊调整,以针对具有不规则的时间接近的间隔的随机时间间隔工作。本发明的实施例可以应用用于不规则时间间隔的Wright公式和针对时间接近的间隔的Hanzak调整以进行堆分配的趋势分析和预测。可以执行适合于由完全GC产生的不规则时间间隔的过滤器结构的非平凡(non-trivial)选择。Holt-Winter-Wright-Hanzak过滤器的结构可以从第一原理推导出来,以系统地设计适应性以匹配由完全GC周期生成的时间系列。
在一些实施例中,应用指数移动平均的公式来平滑时间系列数据、局部线性趋势、季节性趋势、预测的误差残差,以及预测的绝对偏差,以便监视和预测资源利用率度量,诸如堆存储器使用量和线程强度。在一些实施例中,该公式可以基于1956年提出的Brown指数过滤器、1957年提出的Holt双指数过滤器、1960年提出的Winters三指数过滤器、1986年提出的针对不规则时间间隔的Wright扩展、2008年提出的针对时间接近的间隔的Hanzak调整因子,以及异常值检测和削波。以下出版物通过引用被包括在本文中:R.G.Brown,"Exponential Smoothing for Predicting Demand,"Cambridge,Arthur D.Little Inc.(1956),p.15;C.C.Holt,"Forecasting Trends and Seasonal by ExponentiallyWeighted Averages,"Office of Naval Research Memorandum,no.52,(1957);P.R.Winters,"Forecasting Sales by Exponentially Weighted Moving Averages,"Management Science,vol.6,no.3,p.324–342,(1960);D.J.Wright,"Forecasting datapublished at irregular time intervals using an extension of Holt's method,"Management Science,vol.32,no.4,pp.499-510(1986);T.Hanzak,"Improved HoltMethod for Irregular Time Series,"WDS'08Proceedings Part I,pp.62-67(2008);以及S.Maung,S.W.Butler and S.A.Henck,"Method and Apparatus for process EndpointPrediction based on Actual Thickness Measurements,"United States Patent5503707(1996)。
V.使线程强度和堆使用量相关
各种实施例通过使由应用产生的各种线程类的强度统计信息与堆使用量统计信息之间的趋势相关来提供用于识别多线程应用内的堆囤积的栈踪迹(即,各类线程)的技术。在这样做时,一些实施例可以基于堆使用量统计信息来识别正在软件执行环境内执行一个或多个多线程应用的时间段内高的堆使用量趋向于高的季节(即,高的堆使用量季节)。如上所述,一些实施例然后可以通过分析在高的堆使用量季节的相同时间段内从软件执行环境获得的线程转储来识别和收集多个线程类的强度统计信息。然后,一些实施例可以通过按照线程类的强度统计信息和高的堆使用量趋势之间的相关程度对线程类进行排名来从识别出的线程类中识别“堆囤积的”线程类(即,堆囤积的栈踪迹)。
一些实施例可以将这样的线程类称为堆囤积,因为这样的线程执行的代码很可能在堆存储器使用方面是低效的。换句话说,由这些线程执行的错误编写的代码和/或未优化的代码可能导致线程囤积大量的堆存储器,从而显著地导致高的堆使用量趋势。
应该注意的是,从在生产环境中长时间操作基于云的服务的角度来看,这样的存储器热点是重要的。因此,通过使得能够连续检测和缓解这样的热点,一些实施例可以直接影响云服务的操作效率。还应该注意的是,这样的实施例可能优于使用存储器剖析器工具来剖析这样的应用,因为这样的工具可能给应用增加太多的开销。因此,存储器剖析器工具对于连续剖析正在生产环境中执行的应用可能是不切实际的。
A.代码中的低效的堆使用
低效的存储器使用的一个常见原因是由于在线程的栈帧中定义的局部变量。通常,当正在运行的线程实例化对象时,该对象占用堆存储器,直到(直接或间接)引用该对象的栈帧的数量降到零,此时该堆存储器在下一次垃圾回收时被释放。因此,从长时间保持活动的栈帧引用大对象的局部变量可能会无意中对堆存储器使用产生很大影响,因为它们不允许对这些对象进行垃圾回收。
一些实施例假设总堆使用量'G'字节的一部分'p'可以归因于一类线程'C'。另外,一些实施例还可能假设这类线程'C'中的平均堆使用量(即,每线程的堆使用量)是'M'字节。在这个实例中,令'TC'表示线程类'C'的预期线程数。以下关系给出'TC',其被定义为统计模型中的线程强度:
响应于识别堆囤积的线程类,某些实施例可以向开发人员、性能工程师和其它相关人员报告(例如,经由通知或警告)这些线程类。因此,与这种类型的线程相关联的代码可能需要进行详细的代码审查和代码剖析。在一些情况下,可以检查某些相关联的栈帧。例如,调查可能涉及获取在堆使用量接近季节性峰值期间的堆转储,以检查堆囤积的线程的栈踪迹中包含的栈帧。这些栈帧可能包含引用对高的堆使用量有贡献的对象(例如,占用大量堆存储器的对象)的局部变量。这种代码检查和优化可以通过可视代码审查、自动代码审查、识别出的线程的剖析、即时编译器优化、动态字节代码注入或这些技术的组合来完成。在一些实施例中,可以向其它自动代码优化工具报告堆囤积的线程类以利用它们的代码优化功能。
一些实施例可以自动重新设计或重写应用代码以使其对存储器的使用更高效。例如,一些实施例可以自动重写代码,使得局部变量尽快释放大对象而不改变应用的行为或正确性。在一些情况下,这可能涉及深度分析堆囤积的线程中涉及的代码路径。
例如,考虑以下代码:
fileOS.write(buffer.toString().getBytes());
一些实施例可以确定上述代码在存储器使用方面是低效的,因为三个对象:buffer、buffer.toString()和buffer.toString().getBytes()由堆囤积线程的栈帧中的局部变量保持。具体而言,当线程正在文件系统调用中阻塞时,这些局部变量会阻止这三个对象被垃圾收集。
一些实施例可以如下所示修改代码,使得当线程正在文件系统调用中阻塞时,至少两个对象:buffer和buffer.toString()可以被垃圾收集:
String temp1=buffer.toString();
buffer=new StringBuffer();// allow garbage collection of the oldbuffer
byte[]temp2=temp1.getByres();
temp1=null;//allow garbage collection of the string
fileOS.write(temp2);//this is a blocking call
temp2=null;//allow garbage collection of the bytes array
一些实施例可以使用非侵入式方式来检查堆囤积的栈踪迹的栈帧。
B.初始化工作日和周末时段的季节因子
为了识别堆囤积的栈踪迹,一些实施例可以(1)通过估计执行环境的堆使用量统计信息的季节性趋势来识别高的堆使用量季节,以及(2)针对一个或多个线程类中的每一个估计线程类的线程强度统计信息的季节性趋势。在专利申请14/109,578、14/109,546和14/705,304中公开了针对规则或不规则的时间间隔用于确定堆使用量统计信息的季节性趋势和线程强度统计信息的季节性趋势的一些技术,这些申请通过引用并入本文,用于所有目的。
为了确定统计的季节性趋势,可以定义季节性趋势被映射到的时段和间隔。具体而言,可以将时段划分为多个非重叠间隔。时段的每个间隔可以与季节索引相关联。例如,如果时段是一天并且间隔是一小时,那么应该有24个季节索引来涵盖该时段。作为另一个示例,如果时段是一年并且间隔是一个月,那么应该有12个季节索引。
一些实施例可以将工作日、周末和假日建模为单独的时段。如果工作日和周末时段是分开的,那么可以有5个周期的工作日时段与1个周期的周末时段交错,使得在处理5个连续工作日时段之后,处理单个周末时段。因此,连续工作日时段的频率将是每24小时一个工作日时段,而周末时段的频率将是每7天一个周末时段。在各个假日(例如,圣诞节和新年假日)被建模为单独的时段的实施例中,特定假日时段的频率是一年一次。
季节索引可以是应用于与季节索引相关联的间隔的乘性季节因子或加性季节项。例如,在使用乘性季节因子表示季节索引的实施例中,如果间隔'9-10AM'与季节因子1.3相关联,那么在9-10AM间隔期间采样的任何测量值可以被调高30%(即,乘以1.3)。在季节索引由加性季节项表示的实施例中,该加性季节项被加到测量值上。
季节按一些标准对一组间隔进行归类。例如,给定一年的时间段,1月、2月、3月、4月、5月、6月、7月、8月、9月、10月、11月和12月的12个时段可以被归类为如下四个北方气象季节:
12月、1月和2月被归类为冬季季节
3月、4月和5月被归类为春季季节
6月、7月和8月被归类为夏季季节
9月、10月和11月被归类为秋季季节
一些实施例可以将工作日时段划分为96个15分钟的间隔。在这点上,得到96个季节索引,其中96个工作日季节索引(即,工作日因子)中的每一个都映射到96个工作日间隔中的不同的一个工作日间隔。类似地,一些实施例可以将周末时段划分为192个15分钟的间隔,从而得到192个季节索引,其中192个周末季节索引(即,周末因子)中的每一个映射到192个周末间隔中的不同的一个周末间隔。
为了分离出工作日时段的季节模式和周末时段的季节模式,某些实施例可以与将多时段趋势分析过滤器应用于周末时段分开地将多时段趋势分析过滤器应用于工作日时段。然后,一些实施例可以将工作日因子和周末因子重新归一化,使得季节因子1表示工作日时段和周末时段二者的公共参考水平。因此,大于1的季节因子可以表示在该季节因子所应用的间隔期间高于平均值的堆使用量。同时,小于1的另一个季节因子可以表示在该另一个季节因子所应用的另一个时间间隔期间低于平均值的堆使用量。
在一些实施例中,可以扩展用于多时段趋势分析的技术以将假日(例如,劳动节、圣诞节、元旦等)分离为单独的时段,其中假日时段以每12个月一次的频率重复。同时,工作日时段以每24小时一次的频率重复,并且周末时段以每7天一次的频率重复。在这样的实施例中,假日时段的季节因子、工作日时段的季节因子和周末时段的季节因子可以全部被一起重新归一化,使得季节因子1表示工作日时段、周末时段和假日时段的公共参考水平。
给定时段(例如,工作日时段、周末时段或假日/一年时段等),令P表示由给定测量数据集所覆盖的时段的周期数(例如,跨特定时间段的堆使用量测量的时间系列)并且令K表示由该给定数据集所覆盖的时段数内的间隔数。如果L表示时段中的季节索引的数量,则K=P*L。例如,如果数据集内至少有3年的数据,一个时段对应于一年,并且一个间隔对应于一个月,那么该时段的可用周期的数量P为3,并且可用的月间隔的数量为36。
一些实施例可以基于跨时段的多个周期的数据来计算该时段的每个间隔的平均堆使用量。具体而言,一些实施例可以枚举从0到(K-1)的间隔,并使用以下公式计算每个枚举间隔的平均堆使用量
k=0,1,…,K-1;Nk是间隔k中的样本的数量;并且ti是间隔k中的样本编号i的时间
一些实施例还可以基于跨时段的多个周期的数据来计算该时段的每个周期的平均堆使用量。具体而言,一些实施例可以枚举从0到(P-1)的时段的周期,并使用以下公式计算该时段的每个枚举周期的平均堆使用量Dp:
Np是时段的周期p中的样本的数量;并且ti是时段的周期p中的样本编号i的时间
为了初始化时段的季节因子,一些实施例可以使用以下公式计算时段中的每个季节索引的季节因子:
具体而言,特定间隔的季节因子可以等于该间隔跨整个数据集的平均堆使用量(通过平均整个数据集(例如,跨越整个周的数据集)中所有相同间隔(例如,所有9-10AM间隔)的平均堆使用量来计算)与该时段跨整个数据集的平均堆使用量的比率。
C.重新归一化
如上所述,一些实施例可以将工作日季节因子和周末季节因子重新归一化,使得季节因子“1”表示工作日时段和周末时段的公共参考水平。
通常,某些实施例可以通过计算跨所有时段的季节因子的加权平均值并将每个季节因子除以加权平均值来执行重新归一化。考虑以下涉及不同长度的多个时段的季节索引的示例,其中每个时段被划分为15分钟的间隔:
工作日的季节索引:Di,i=1,2,…96
周末的季节索引:Ei,i=1,2,…,192
各个假日的季节索引:Hk,i,i=1,2,…,96;k=1,2,…10
假设在特定年份,有253个工作日(假日除外)、50.5个周末和10个假日,其中253+50.5*2+10=364天。在该示例中,一些实施例可以使用以下公式来计算季节因子的加权平均值“A”,其中权重与一年中的每个时段(例如,工作日时段、周末时段和10个各个假日时段)的周期的数量成比例。
一些实施例可以通过将每个季节因子Di,Ei和Hk,i除以A得到每个时段的新的重新归一化的季节因子。
返回到用于识别堆囤积的栈踪迹的步骤,在使用上述公式初始化季节索引之后,一些实施例可以通过将每个周末因子和每个工作日因子除以归一化因子来重新归一化工作日因子和周末因子,如下所示:
在工作日因子和周末季节因子的重新归一化之后,季节因子1应该表示工作日因子和周末因子两者的公共参考水平。
D.平滑样条拟合
如上所述,一些实施例可以跨多个时段拟合平滑样条以在时段的周期之间(例如,两个工作日时段之间)或两个相邻时段的周期之间(例如,工作日时段和周末之间)提供平滑过渡。具体而言,拟合样条可以涉及将一个或多个时段的季节索引连接以平滑这些时段之间的过渡。
通常,当某些实施例(例如,过滤器)到达时段Ai的周期的结束并且开始时段Ai的新的周期时,诸如当在从星期一到星期二、星期二到星期三、星期三到星期四和星期四到星期五的过渡处重复工作日周期时,这样的实施例可以连接季节索引Ai的三个序列并且跨整个序列拟合平滑样条。然后,一些实施例可以采用经平滑的序列的中间段来表示新的经平滑的季节索引Ai。
当某些实施例(例如,过滤器)到达时段Ai的周期的结束并且开始相邻时段Bi的新的周期时,诸如当从星期五过渡到星期六时,一些实施例可以连接季节索引Ai的一个序列、季节索引Bi的一个序列,以及在时段Bi之后的时段的季节索引Ci的一个序列,并且跨整个序列拟合平滑样条。然后,一些实施例可以采用经平滑的序列的中间段来表示新的经平滑的季节索引Bi。一些实施例也可以采用经平滑的序列的第一段来表示经平滑的季节索引Ai。
当某些实施例(例如,过滤器)到达时段Bi的周期的结束并且开始相邻时段Ci的新的周期时,诸如当从星期日过渡到星期一时,一些实施例可以连接时段Bi之前的时段的季节索引Ai的一个序列、季节索引Bi的一个序列和季节索引Ci的一个序列,并且跨整个序列拟合平滑样条。然后,一些实施例可以采用经平滑的序列的中间段来表示新的经平滑的季节索引Bi。一些实施例也可以采用经平滑的序列的第三段来表示新的经平滑的季节索引Ci。
关于云服务,周末和假日期间的负载周期通常不同于工作日期间的负载周期。常规的季节趋势分析解决方案通常只可以表示一个时段的季节索引。为了将周末的季节索引与常规工作日的季节索引分离,这种常规的解决方案可能依赖于将时段的范围延长到整个周或整个月。此外,这种常规解决方案可能单独地处理假日。
返回到用于识别堆囤积的栈踪迹的步骤,为了平滑工作日季节因子,一些实施例可以通过连接工作日因子的三个序列来组成季节因子阵列。例如,一些实施例可以通过执行以R编程语言的以下代码来生成阵列:
factors<-c(smoothedWeekdaySeasonalFactor,
smoothedWeekdaySeasonalFactor,
smoothedWeekdaySeasonalFactor)
接下来,一些实施例可以应用样条来平滑工作日因子的阵列。例如,一些实施例可以用0.3的平滑参数来调用R的smooth.spline函数以平滑因子:
extendedWeekdayIndices<-1:(3*96)
f<-smooth.spline(extendedWeekdayIndices,factors,spar=0.3)
然后,一些实施例可以将阵列内的中间序列(即,中间96个工作日因子)指定为经平滑的工作日因子。例如,一些实施例可以通过执行以R编程语言的以下代码来获得经平滑的工作日因子:
sandwichWeekdayIndices<-(96+1):(96*2)
smoothedWeekdaySeasonalFactor<-predict(f,sandwichWeekdayIndices)$y
以类似于平滑工作日因子的方式,一些实施例可以应用样条来平滑周末因子。具体而言,一些实施例可以通过在两个工作日因子序列之间连接周末因子序列来组成季节因子的阵列。例如,一些实施例可以通过执行以R编程语言的以下代码来生成阵列:
factors<-c(smoothedWeekdaySeasonalFactor,
smoothedWeekendSeasonalFactor,
smoothedWeekdaySeasonalFactor)
接下来,一些实施例可以应用样条来平滑工作日和周末因子的阵列。例如,一些实施例可以用0.3的平滑参数来调用R的smooth.spline函数以平滑因子:
extendedWeekendIndices<-1:(2*96+192)
f<-smooth.spline(extendedWeekendIndices,factors,spar=0.3)
然后,一些实施例可以将阵列内的中间序列(即,阵列内的中间192个季节因子,其为周末因子)指定为平滑的周末因子。例如,一些实施例可以通过执行以R编程语言的以下代码来获得经平滑的周末因子:
sandwichWeekendIndices<-(96+1):(96+192)
smoothedWeekendSeasonalFactor<-predict(f,sandwichWeekendIndices)$y
应该注意的是,一些实施例可以分别表示96个工作日季节索引和192个周末季节索引,以便将工作日期间观察到的季节模式与周末期间观察到的季节模式分开。在一些实施例中,顺序过滤堆使用量统计信息的时间系列可以涉及五组指数过滤器,包括一组用于堆使用量测量、一组用于季节因子、一组用于线性趋势、一组用于加速趋势以及一组用于残差。
如上所述,为了确保样本准确性,可以在以不规则时间间隔发生的完全垃圾收集(GC)周期期间进行堆分配测量。在堆使用量特别高的情况下,由于持续的垃圾收集,采样间隔可能变得任意接近于零。由于预测涉及变化速率的估计,因此如果不规则时间间隔变得任意接近于零,那么变化速率可能成为柯西分布的随机变量,其均值和标准差是不确定的。因此,一些实施例可以采用Holt的双指数过滤器、Winters的三指数过滤器、Wright的针对不规则时间间隔的扩展、Hanzak的针对时间相近的间隔的调整因子、以及具有异常值截止的自适应缩放的异常值检测和削波,来克服用于确定与完全GC相关联地确定的统计信息的季节性趋势的柯西分布问题。在一些实施例中,可以将五组指数过滤器顺序地应用于时间系列以估计工作日因子和周末因子。
当某些实施例(例如,过滤器)到达工作日和周末时段的处理周期的结束时,在处理该时段的下一个周期或过渡到不同时段(例如,从工作日时段过渡到周末时段)之前,这样的实施例可以如下将每个周末因子和工作日因子除以归一化因子
在每个时段结束之后,一些实施例可以应用样条来平滑季节因子。例如,当到达另一个工作日时段之前的工作日时段的结束时(即,当从星期一到星期二、从星期二到星期三、从星期三到星期四、或从星期四到星期五过渡时),一些实施例可以通过连接工作日因子的三个序列来组成季节因子阵列。例如,一些实施例可以通过执行以R编程语言的以下代码来生成阵列:
factors<-c(smoothedWeekdaySeasonalFactor,
smoothedWeekdaySeasonalFactor,
smoothedWeekdaySeasonalFactor)
接下来,一些实施例可以应用样条来平滑工作日因子的阵列。例如,一些实施例可以用0.3的平滑参数来调用R的smooth.spline函数以平滑因子:
extendedWeekdayIndices<-1:(3*96)
f<-smooth.spline(extendedWeekdayIndices,factors,spar=0.3)
然后,一些实施例可以将阵列内的中间序列(即,中间96个工作日因子)指定为经平滑的工作日因子。例如,一些实施例可以通过执行以R编程语言的以下代码来获得经平滑的工作日因子:
sandwichWeekdayIndices<-(96+1):(96*2)
smoothedWeekdaySeasonalFactor<-predict(f,sandwichWeekdayIndices)$y
在不同的实例中,当到达周末时段之前的工作日时段的结束时(即,当从星期五过渡换到星期六时),一些实施例可以通过在工作日季节因子的两个序列之间连接周末季节因子序列来组成季节因子阵列。例如,一些实施例可以通过执行以R编程语言的以下代码来生成阵列:
factors<-c(smoothedWeekdaySeasonalFactor,
smoothedWeekendSeasonalFactor,
smoothedWeekdaySeasonalFactor)
接下来,一些实施例可以应用样条来平滑工作日和周末因子的阵列。例如,一些实施例可以用0.3的平滑参数来调用R的smooth.spline函数以平滑因子:
extendedWeekendIndices<-1:(2*96+192)
f<-smooth.spline(extendedWeekendIndices,factors,spar=0.3)
然后,一些实施例可以将阵列内的左序列(即,阵列内的前96个季节因子,其为工作日因子)指定为经平滑的工作日因子。例如,一些实施例可以通过执行以R编程语言的以下代码来获得经平滑的工作日因子:
leftsideWeekendIndices<-1:96
smoothedWeekdaySeasonalFactor<-predict(f,leftsideWeekendIndices)$y
在不同的实例中,当到达周末时段的结束时(即,从星期日过渡到星期一),一些实施例可以通过在工作日季节因子的两个序列之间连接周末季节因子序列来组成季节因子的阵列。例如,一些实施例可以通过执行以R编程语言的以下代码来生成阵列:
factors<-c(smoothedWeekdaySeasonalFactor,
smoothedWeekendSeasonalFactor,
smoothedWeekdaySeasonalFactor)
接下来,一些实施例可以应用样条来平滑工作日和周末因子的阵列。例如,一些实施例可以用0.3的平滑参数来调用R的smooth.spline函数以平滑因子:
extendedWeekendIndices<-1:(2*96+192)
f<-smooth.spline(extendedWeekendIndices,factors,spar=0.3)
然后,一些实施例可以将阵列内的中间序列(即,阵列内的中间192个季节因子,其为周末因子)指定为经平滑的周末因子。例如,一些实施例可以通过执行以R编程语言的以下代码来获得经平滑的周末因子:
sandwichWeekendIndices<-(96+1):(96+192)
smoothedWeekendSeasonalFactor<-predict(f,sandwichWeekendIndices)$y
一些实施例还可以将阵列内的右序列(即,阵列内的最后96个季节因子,其为工作日因子)指定为经平滑的工作日因子。例如,一些实施例可以通过执行以R编程语言的以下代码来获得经平滑的工作日因子:
rightsideWeekendIndices<-(96+192+1):(2*96+192)
smoothedWeekdaySeasonalFactor<-predict(f,rightsideWeekendIndices)$y
应该注意的是,一些实施例可以在每次顺序过滤器到达(1)时段的周期的结束并且开始相同时段的新周期时(例如,顺序过滤器到达星期一的结束)或者(2)时段的周期的结束并且开始相邻时段的新周期时(例如,顺序过滤器到达星期五的结束)执行上述的重新归一化和平滑样条拟合。
E.针对季节性周期的测试
一些实施例可以针对数据集的一个或多个候选时段来测试季节性周期的存在,以确定是否应该表示该时段的单独的季节索引序列。通常,为了确定数据集是否表现出特定时段的季节性周期,一些实施例可以执行以下步骤。
令Q表示时段中的季节索引的数量,P表示时段的可用周期的数量,并且K表示跨时段的这些周期的可用间隔的数量,其中K=P*Q。
一些实施例可以计算时段的周期的每个间隔中的平均度量。为此,一些实施例可以枚举从0到(K-1)的间隔,并使用下面的公式计算该时段的每个间隔的平均度量:
k=0,1,…,K-1;Nk是间隔k中的样本的数量;并且ti是间隔k中的样本编号i的时间
然后,一些实施例可以计算时段的每个周期的平均度量。为此,一些实施例可以枚举从0到(P-1)的时段的周期,并使用下面的公式计算时段的每个周期的平均度量:
Np是时段的周期p中的样本的数量;
并且ti是时段的周期p中的样本编号i的时间
然后,一些实施例可以使用以下公式计算该时段的每个周期p的季节索引的序列:
然后,一些实施例可以应用零(null)假设测试来检测时段中是否存在季节性周期。在这点上,待测试的零假设可以对应于最近周期'u'的季节索引与前一周期'v'的季节索引之间的相关系数ru,v为零的假设。具体而言,一些实施例可以使用以下公式确定相关系数ru,v:
一些实施例可以采用各种技术来确定相关系数ru,v是否足够大以指示在显著性水平之上在周期'u'和'v'之间存在共同的季节性周期。例如,一些实施例可以采用Student-t测试、置换测试或Fisher变换。
为了测试该假设,一些实施例可以定义一个或多个测试统计,其可以是参数的函数。在这种情况下,待测试的是相关系数ru,v。以下测试统计t具有Student’s t-分布,具有'n-2'的自由度并且是ru,v的函数。一些实施例定义零假设ru,v=0,其假定季节索引在时段的周期之间不相关。一些实施例可以搜索证据以通过接受替代假设来拒绝零假设(即,ru,v=0)。
令F(t)表示概率分布。给定0.1的显著性水平,令t0.9,(n-2)表示随机变量t的值,使得F(t)=0.9。替代假设是单方面条件:
如果该条件为真,则接受替代假设,这表明在周期年份'u'和'v'之间存在共同的季节性周期。如果在最近的周期和前一周期之间存在共同的季节性周期,则一些实施例可以继续计算周期的每个季节索引的季节因子。一些实施例应用上述公式来检测软件执行环境的堆使用量的年度季节性周期的存在,如下所述。
F.检测堆使用量的年度季节性周期
当分析软件执行环境的多年堆使用量统计信息时,一些实施例可以以不同时间尺度检测多于一个的季节性趋势。例如,这样的实施例可以检测多年时间系列的堆使用量统计信息、年度季节性趋势和每日季节性趋势,它们都被叠加到多季节性趋势上。因此,一些实施例可以采用适当的时间尺度来分析年度季节性趋势,其中该时间尺度具有与1年对应的时段和与1个月对应的间隔。因此,可以将一年长的时段划分为12个一月长的间隔。
为了确定数据集是否表现出年度季节性周期,一些实施例可以首先确定数据集中的月度索引的乘性因子。
在特定实例中,令P表示数据集中的可用年数(即,一年时段的周期数)。此外,令Q表示数据集中的可用月数(即,周期数内的间隔数)。因此,Q=12*P。令K表示数据集中可用的工作日或周末的数量。令索引k的范围从0到(K-1),以表示可用工作日或周末的枚举。令Nk表示第k个工作日或周末中的样本的数量。使用以下公式,一些实施例可以应用以下公式来计算数据集中每个工作日或周末的平均堆使用量:
并且Nk是天k中的样本的数量
一些实施例可以定义函数H,H:(Year×Integer)→Index,其映射包括年份的索引和与该年内的工作日或周末的索引对应的整数的有序对。使用以下公式,一些实施例然后可以计算根据该年内的工作日或周末的平均堆使用量计算每年的平均堆使用量:
Np是一年时段的周期p中的工作日的数量;
并且H(p,i)是一年时段的周期p中的第i个工作日的索引。
一些实施例定义函数G,G:(Month×Integer)→Index,其映射包括月份的索引和与该月内的工作日或周末的索引对应的整数的有序对。使用以下公式,一些实施例可以根据该月内的工作日或周末的平均堆使用量计算该时段的每个月份间隔的平均堆使用量:
Mm是月份m中的工作日的数量;
G(m,i)是月份m中的第i个工作日的索引;
并且p是年时段的周期的索引。
具体而言,上述公式产生其对应于一年长时段p的每个周期的12个月度平均值。一个月的平均堆使用量可以除以年度平均堆使用量,以获得与该月对应的月度索引的乘性因子。在这样的实施例中,如果确定特定月份的乘性因子大于1,则该月份中的堆使用量高于平均值。另一方面,如果确定特定月份的乘性因子小于1,则该月份中的堆使用量低于平均值。
在确定月度索引的乘性因子之后,一些实施例可以应用零假设测试来检测是否存在年度季节性周期。在这点上,待测试的零假设可以对应于最近年'u'的月索引与前一年'v'的月索引之间的相关系数ru,v为零的假设。具体而言,一些实施例可以使用下面的公式来确定相关系数ru,v:
一些实施例可以采用各种技术来确定相关系数ru,v是否足够大以指示在显著性水平之上在年份'u'和'v'之间存在共同的季节性周期。例如,一些实施例可以采用Student-t测试、置换测试或Fisher变换。
如果零假设为真(即,ru,v=0),则以下测试统计t具有Student’s t-分布,具有'n-2'的自由度
令F(t)表示概率分布。给定0.1的显著性水平,令t0.9,(n-2)表示随机变量t的值,使得F(t)=0.9。替代假设是单方面条件:
接受替代假设的条件表明在年份'u'和'v'之间存在共同的季节性周期。
G.确定年度高的堆使用量季节
如果确定在最近年份和前几年之间存在共同的季节性周期,则一些实施例可以通过采用以下公式来计算通过月度季节索引0至11枚举的每个月的季节因子:
在替代实施例中,最近年份(即,周期)的月度索引可以用作月度季节索引,如以下公式所指示的:
为了对年度高的堆使用量季节进行归类,一些实施例可以识别与在一年长的时段中具有最大季节因子的月份对应的季节索引N。然后,这些实施例可以使用索引N作为种子。从N开始,这样的实施例可以扫描具有大于阈值T的季节因子的小于或大于N的季节索引(即,季节索引0、1、2...N-1、N+1、N+2)。在一些实施例中,T大于1。如果存在多于一个N使得则一些实施例可以对多于一个不相交的高的堆使用量季节进行归类。函数选择索引序列的第s个元素N,参数s用于在存在多于一个N使得的情况下打破平局。一些实施例可以对每个不相交的高的堆使用量季节进行归类并且针对每个季节重复相关性分析。在一些实施例中,通过以下递归来定义针对高的堆使用量季节对月度季节索引的集合进行归类的方法:
且[[J=(K+1)mod P,K=MAX(VW)]or[J=(L-1+P)mod P,L=MIN(VW)]]}
应该注意的是,上面的递归涉及可以用于打破平局的无约束变量s。在一些实施例中,默认s=1。
在某些实施例中,季节索引的闭包V对年度高的堆使用量季节进行归类。阈值T可以被设置为百分比,诸如季节因子的范围的85%。例如,假设一年长时段中的12个月度季节索引的季节因子如下表所给出。
1月 | 2月 | 3月 | 4月 | 5月 | 6月 | 7月 | 8月 | 9月 | 10月 | 11月 | 12月 |
0.76 | 0.82 | 1.0 | 1.2 | 1.29 | 1.34 | 1.26 | 1.12 | 1.01 | 0.99 | 0.95 | 0.9 |
乘性季节因子的范围是(1.34-0.76),即0.58。因此,季节因子的范围的85%是(0.76+0.85*0.58),即1.253。给定85%阈值T,T=1.25。因此,这样的实施例可以将5月、6月和7月归类为年度高的堆使用量季节。
一些实施例可以选择数据集的跨一年长时段的最近周期的段。例如,在2013年、2014年、2015年和2016年的周期当中,这些实施例可以选择覆盖2015年至2016年的数据的段。所选择的数据段可以跨越堆使用量统计信息中年度高的堆使用量季节内的2个或更多个星期。例如,如果季节因子如下表所给出,则数据段可以选自2015年11月、2015年12月和2016年1月。
1月 | 2月 | 3月 | 4月 | 5月 | 6月 | 7月 | 8月 | 9月 | 10月 | 11月 | 12月 |
1.26 | 1.12 | 1.01 | 0.99 | 0.95 | 0.9 | 0.76 | 0.82 | 1.0 | 1.2 | 1.29 | 1.34 |
H.过滤常数和时区偏移的回归
一些实施例可以包含对时区偏移的估计。如果时区偏移不可用,则一些实施例可以对数据集的段执行非线性回归以估计时区偏移并使用它来过滤数据。通过提供对时区偏移的估计,一些实施例可以改进对在时段之间的过渡中的季节索引的估计。
具体而言,一些实施例可以用以下过滤器常数(即,作为独立变量的回归参数)执行非线性回归:measureFilterConstantα,rateFilterConstantβ,accelerationFilterConstantκ,seasonalFactorFilterConstantγ,errorResidualFilterConstantδ和timeZoneOffset tz,以最小化1-步预测的残差的均方误差(MSE)和/或平均绝对偏差(MAD)。在一些实施例中,时间戳可以在回归中以时区偏移tz被移位。一些实施例可以使用优化例程(例如,由R编程语言提供的优化例程)来应用非线性多元回归。一些实施例可以使用α,β,κ,γ,δ和tz的最佳值导出工作日和周末季节因子,如这些实施例所采用的以下公式中所指示的:
一些实施例包括时区偏移作为回归参数,使得时段的周期之间或两个相邻时段之间的过渡可以尽可能地准确。
I.按相关程度对线程类进行排名
一旦确定年度高的堆使用量季节,一些实施例就可以计算和/或获得表示由近来(例如,最近)年度高的堆使用量季节所覆盖的每日/每周季节周期的工作日/周末因子。应该注意的是,数据集的该段中(即,在年度高的堆使用量季节期间)的每日/每周季节性周期可能比在其它时间(即,在年度高的堆使用量季节之外)更加明显。因此,确定堆使用量中的季节性趋势与一个或多个线程类的强度统计信息中的季节性趋势之间的相关程度可以基于数据集的该段。换句话说,对于相关性分析,一些实施例可以使用与由最近的年度高的堆使用量季节所覆盖的时间间隔相同的时间间隔来导出各个线程类的季节性趋势。
应该注意的是,为了确定特定线程类的强度统计信息的季节性趋势,一些实施例可以采用如上所述的用于确定堆使用量的季节性趋势的技术。换句话说,线程强度统计信息和堆使用量统计信息的季节性趋势两者都可能涉及对工作日和周末时段使用相同数量的季节索引(例如,用于工作日时段的96个季节索引和用于周末时段的192个季节索引)。
在确定堆使用量的季节性趋势和一个或多个线程类的强度统计信息的季节性趋势后,一些实施例然后可以针对这一个或多个线程类中的每一个来计算堆使用量的季节性趋势和线程类的强度统计信息的季节性趋势之间的相关程度。具体而言,可以针对96个季节因子或192个季节因子的序列计算相关程度。应该注意的是,计算季节性趋势之间的相关程度可能比计算堆使用量度量序列与线程强度度量序列之间的相关程度更高效,因为度量的序列可能长得多。
令H表示用于堆使用量的有N个季节因子的序列。令T表示一类线程的线程强度的有N个季节因子的序列。季节因子的两个序列的相关系数由CorrelationCoefficient(H,T)给出,如下面所定义的:
一些实施例可以通过对最近年度高的堆使用量季节中包括的堆使用量统计信息进行回归来导出堆使用量的工作日和周末季节因子。让我们用(t1,t2)来表示数据集的该段的时间间隔。为了分析一类线程的强度统计信息的季节因子与堆使用量的季节因子之间的相关性,一些实施例可以采用来自在与该线程类相关联的SeasonalTrendInfo中的季节因子时间系列中的相同时间间隔(t1,t2)的季节因子。具体而言,该季节因子时间系列可以被存储在相关联的SeasonalTrendingInfo对象中的smoothedWeekdaySeasonalFactor成员变量和smoothedWeekendSeasonalFactor成员变量中。
一些实施例可以遍历所有线程类的ThreadClassificationInfo对象,并递归地遍历每个ThreadClassificationInfo对象中的SegmentInfo对象,以收集ThreadClassificationInfo对象和SegmentInfo对象中包含的SeasonalTrendInfo对象。在使用上面识别出的公式计算堆使用量和每个线程类之间的CorrelationCoefficient(H,T)时,一些实施例可以检索每个SeasonalTrendInfo对象中的工作日因子或周末因子。一旦已经为每线程类计算相关程度,一些实施例就可以通过线程类与堆使用量季节性趋势的相关程度来对线程类进行排名。然后,高排名的线程类可以被归类为堆囤积的线程类。然后,一些实施例可以分析与堆囤积的线程类相关联的栈踪迹和代码,以识别可以被手动或自动地纠正和/或改进的低效存储器使用。
应该注意的是,可以扩展一些实施例以基于除工作日和周末时段之外的时段(例如,季度末时段)来确定相关系数。
图9图示了根据一些实施例的用于识别可能对软件执行环境内的高的堆使用量有贡献的代码的过程的流程图900。在一些实施例中,流程图900中描绘的过程可以由具有一个或多个处理器(例如,图17的计算机系统1700)的计算机系统来实现,其中该一个或多个处理器可以基于存储在计算机可读介质中的计算机代码来执行步骤。图9中描述的步骤可以以任何顺序执行,并且可以有或没有任何其它步骤。
流程图900开始于步骤902,其中实施例确定一个或多个进程的堆使用量超过阈值的时间长度。该时间长度可以与年度高的堆使用量季节对应,而阈值可以与指派给跨一个或多个时段(例如,工作日时段和周末时段)的间隔(例如,15分钟间隔)的季节因子的范围的百分比对应。在一些实施例中,可以通过选择百分比来设置阈值。一旦选择了百分比,就可以由季节因子的范围和百分比的乘积与最小季节因子的和给出阈值。例如,如果所选的百分比为85%,最小季节因子为0.76,并且最大季节因子为1.34,则阈值可以被给出为(0.76+0.85*(1.34-0.76)),即1.253。因此,可以将具有超过1.25的乘性季节因子的任何间隔确定为堆使用量超过阈值的时间长度的一部分。
在步骤904处,实施例确定该一个或多个进程在该时间长度期间的堆信息。堆信息可以与在该时间长度期间在不同点处由软件执行环境内的该一个或多个进程使用的堆存储器的量对应。例如,堆信息可以基于以不规则间隔(例如,在完全GC期间)从软件执行环境获得的堆使用量度量。此外,软件执行环境可以与包括一个或多个虚拟机(例如,JVM)的生产环境对应,并且一个或多个进程可以支持一个或多个云服务。
在步骤906处,实施例确定该一个或多个进程在该时间长度期间的线程信息。在一些实施例中,对于从经分析的线程转储确定的一个或多个线程类中的每一个,线程信息可以包括针对多个间隔中的每个间隔的线程强度季节因子。
在一些实施例中,堆信息可以包括针对多个间隔中的每个间隔的堆使用量季节因子。具体而言,时间长度可以跨越具有第一长度的第一时段(例如,工作日时段)的一个或多个周期和具有第二长度的第二时段(例如,周末时段)的一个或多个周期。每个时段可以被分割成多个间隔。例如,工作日时段可以被分割成96个15分钟的间隔,而周末时段可以被分割成192个15分钟的间隔。
应该注意的是,多个间隔中的每个间隔可以被映射到时段之一的特定季节(即,季节索引)。对于每个季节索引,一些实施例可以确定堆使用量季节因子,并且对于所确定的每个线程类,确定线程强度季节因子,其可以导致每个间隔与堆使用量季节因子和多个线程强度季节因子(每个线程类一个线程强度季节因子)相关联。例如,假设发现了三个不同的线程类,那么工作日时段可以具有96个堆使用量季节因子和288个线程强度季节因子(三个线程类中每个线程类有96个线程强度季节因子),而周末时段可以具有192个堆使用量季节因子和576个线程强度季节因子。
在步骤908处,实施例将堆信息与线程信息相关,以识别该一个或多个进程的与超过阈值的堆使用量对应的一行或多行代码。下面关于图10更详细地讨论将堆信息与线程信息相关的步骤。
在步骤910处,响应于识别出该一行或多行代码,实施例发起与该一行或多行代码相关联的一个或多个动作。例如,实施例可以生成与该一行或多行代码相关联的警报,其被发送给相关人员或代码优化工具。作为响应,可以调查和/或优化识别出的代码行。替代地,一些实施例可以优化这一行或多行代码从而以更高效的方式使用堆存储器。
图10图示了根据一些实施例的用于计算各线程类和高的堆使用量之间的相关程度的过程的流程图1000。在一些实施例中,流程图1000中描绘的过程可以由具有一个或多个处理器(例如,图17的计算机系统1700)的计算机系统来实现,其中该一个或多个处理器可以基于存储在计算机可读介质中的计算机代码来执行步骤。图10中描述的步骤可以以任何顺序执行,并且可以有或没有任何其它步骤。
流程图1000开始于步骤1002,其中实施例获得一个或多个进程的一个或多个线程转储。如上所述,控制系统可以周期性地使软件执行环境进行线程转储,其中每个线程转储包括由在软件执行环境内执行的一个或多个进程产生的线程的一个或多个栈踪迹。
在步骤1004处,实施例通过从一个或多个线程转储接收一个或多个线程并基于与接收到的线程对应的栈踪迹对每个接收到的线程进行归类来获得一个或多个线程类。一旦已经接收并处理所有线程转储,实施例就可以分析一个或多个线程类中的每一个,以在步骤1006-1016中确定每个线程类和高的堆使用量之间的相关程度。
在决策1006处,实施例确定是否存在一个或多个线程类的用于确定与高的堆使用量的相关程度的另一个线程类。如果是,则实施例可以进行到步骤1008。否则,实施例可以进行到步骤1018。
在可选步骤1008处,实施例计算多个间隔的堆使用量季节因子的平均值。在步骤1010处,实施例计算线程类和多个间隔的线程强度季节因子的平均值。在可选的步骤1012处,实施例计算多个间隔的堆使用量季节因子的方差。在步骤1014处,实施例计算线程类和多个间隔的线程强度季节因子的方差。在步骤1016处,实施例计算线程类和超过阈值的堆使用量之间的相关程度。
在步骤1018处,实施例从一个或多个线程类中选择与超过阈值的堆使用量具有最高相关程度的给定的线程类。具体而言,一旦针对每个线程类计算出相关程度,一些实施例就可以通过线程类与堆使用量季节性趋势的相关程度来对线程类进行排名。然后,可以选择高排名的线程类作为给定的线程类。
在步骤1020处,实施例基于这些给定的线程类识别可能对高的堆使用量有显著贡献的一行或多行代码。具体而言,一些实施例然后可以分析由栈踪迹指定的文件名和行,以定位与堆囤积的线程类相关联的代码行。应该注意的是,一个或多个进程的属于给定线程类的每个线程执行该一行或多行代码。
VI.克服预测中的弱外生性和异方差性
如上所述,为了确保样本准确性,可以在以不规则时间间隔发生的完全垃圾收集(GC)周期期间进行堆分配测量。在堆使用量特别高的情况下,由于持续的垃圾收集,采样间隔可能变得任意接近于零。因此,基于堆分配测量的时间系列数据可能表现出弱外生性(其中生成残差的过程在某种程度上取决于生成完全GC样本的时间间隔的过程),以及异方差性(其中残差的方差随时间不是恒定的)。
常规上,生成线性趋势的普通最小二乘回归假定预测器变量和响应变量是由既外生(exogenous)又同方差(homoscedastic)的过程生成的。然而,关于基于在完全GC期间进行的测量的数据集,预测器变量(即,不规则时间间隔)和响应变量(即,在完全GC期间进行的堆使用量测量)不是独立的,因为进行完全GC的频率在堆使用量增加时可能增加。一些实施例可以使用鲁棒和抗性回归方法来克服数据集的弱外生性和异方差性。
某些实施例可以利用鲁棒最小二乘回归来克服在这些数据集中表现出的弱外生性和异方差性。具体而言,一些实施例可以(1)将测量的时间系列分解为去季节化度量分量(即,去季节化分量)和季节因子分量(即,季节性效应因子),(2)对去季节化度量分量应用鲁棒线性回归,(3)对季节因子分量应用平滑样条过滤器,以及(4)将线性回归线和经平滑的季节因子重构为季节性和线性趋势模型。
最小修剪方块(LTS)估计器是抵抗异常值的影响的鲁棒的回归技术。给定一组N个样本,LTS估计器通过将与最大平方残差对应的50%样本修剪为异常值来最小化最小50%平方残差的总和。LTS估计器运行所有N个样本的普通最小二乘回归的一次迭代以对残差进行排序来选择最小的N/2个残差(即,修剪的样本)。然后,LTS估计器通过更新修剪的样本来迭代地重新运行回归,以减小平方残差的平均值。然而,与下面描述的某些实施例相比,LTS算法的时间复杂度可能相对高。
广义加权最小二乘(WLS)估计器是将每个样本的平方误差残差乘以与样本的方差成反比的权重的鲁棒的回归技术。采用WLS估计器可以取决于根据数据的先验知识确定的权重。例如,先验知识可以指定(1)用于测量不同采样点的不同工具的准确度,(2)与相同时刻对应的冗余测量值之间的方差,或(3)测量的最近邻居组之间的方差。如果权重不能通过先验知识来确定,则WLS估计器可以运行普通最小二乘回归的一次迭代来估计残差并使用残差的逆作为权重来迭代地重新运行回归以产生对线性模型的稳定估计。然而,与下面描述的某些实施例相比,WLS算法的时间复杂度相对高。
在专利申请14/109,546(该专利通过引用并入本文,用于所有目的)中,公开了用于过滤度量的变化速率的一组等式。该过滤器监视度量的趋势:
由于变化速率涉及除以时间间隔的长度(tn-t′n-1),因此一些实施例可以调整过滤器参数以在时间间隔的长度(tn-t′n-1)相对短时给予样本相对小的权重。
过滤器参数在以下等式中通过调整因子进行调整:
速率过滤器参数用于过滤经平滑的变化速率,如下所示。如果不采用季节性趋势,那么一些实施例可以使用值来更新平均值,如下面的公式中所示:
另一方面,如果采用季节性趋势,那么一些实施例可以取决于时间落在周末还是落在工作日时段来使用以下公式之一,其中和分别是周末和工作日时段的季节因子。
接下来,一些实施例可以使用以下公式确定去季节化的原始增长率:
然后,一些实施例可以使用以下公式来更新移动平均值:
具体而言,由上述等式生成的速率过滤器参数表示权重,该权重基于在特定样本与紧接在该特定样本之前的另一个样本之间发生的时间间隔的长度。速率过滤器参数与时间系列中的测量数据之间存在一对一的对应关系。图11描绘了针对示例数据集跨整个时间范围对采样时间间隔绘制过滤器参数的图表。虽然时间范围被划分为6个重叠的子范围,但是每个子范围中的图表显示样本时间间隔和过滤器参数之间存在线性关系。如从图中可以看到的,当采样时间间隔小时,过滤器参数(即,样本的权重)小。该调整取决于当前采样点周围的采样点的密度动态地减少过滤器中的样本的权重。
一些实施例使用速率过滤器参数来修剪数据点。修剪数据点可以有助于跨整个时间范围均匀采样点的密度,从而提高线性回归算法的鲁棒性。关于表示在完全GC周期期间软件执行环境中的堆使用量的测量的数据点,靠近在一起的数据点可以与其中更经常执行完全GC的较高的堆使用量的时段(例如,负载尖峰期间)对应。
一些实施例将速率过滤器参数与阈值进行比较,并且如果速率过滤器参数小于阈值,则从鲁棒线性回归中排除(即,修剪)对应的数据点。一些实施例可以使用速率过滤器参数的中值或均值作为阈值。具体而言,一些实施例可以修剪靠近在一起的数据点,因为这样的数据点可能表示负载浪涌或异常值。因此,一些实施例可以通过沿着时间轴均匀数据点的密度来减轻弱外生性状况,其减小了不规则时间间隔和残差之间的相关性。
在专利申请14/109,546中公开了通过以下等式生成的针对预测误差残差的时间系列和针对预测度量的时间系列该专利申请通过引用并入本文,用于所有目的。
一些实施例可以使用以下公式生成预测度量的误差残差:
因为过滤器生成的经平滑的绝对误差残差与最小二乘回归的残差的方差之间存在相关性,因此一些实施例可以使用经平滑的绝对误差残差的逆作为广义加权最小二乘回归的权重。在这样做时,一些实施例可以通过向具有与期望值的相对大的偏差的样本值赋予相对小的权重来减轻异方差性状况。该期望值可以表示近邻组样本的卷积。
以下示例代码(用R编程语言编写)示出了如何可以计算修剪的样本子集和样本的权重。如下面的示例代码所示,一些实施例可以使用R函数“rlm”,该函数使得某些实施例能够指定修剪的样本子集和样本的权重以用于生成加权最小二乘回归。应该注意的是,示例代码中的rateFilterParameter、seasonalFactor、absoluteErrorResidual、度量和时间向量是具有相同时间范围的时间系列。
针对与数据点的时间戳对应的每个时间戳tn,速率过滤器参数被给出为由表示的值的时间系列。如果其中z是阈值,则从线性回归中排除对应的数据点通常,一些实施例可以使用速率过滤器参数的N百分位数处的任何值(例如,作为50百分位数的中值)作为阈值z。
在一些实施例中,针对与数据点的时间戳对应的每个时间戳tn,绝对误差残差被给出为时间系列时间戳tn处的样本的权重可以与成反比。一些实施例可以补偿表示短期负载浪涌或异常值的数据点之间的方差变化。
为了减少堆使用量中的异常值和短期浪涌对线性回归的影响,一些实施例可以将均匀数据点的密度的技术与指派较小权重给偏离样本值的技术相组合。在这样做时,一些实施例可以增加线性回归的鲁棒性,这可以有助于捕获(例如,堆使用量的)长期趋势。应该注意的是,一起使用这两种技术可以提供线性回归线与数据的更好拟合,并且可以比使用通常涉及几次回归迭代的常规的LTS估计器或WLS估计器更高效。
为了进一步提高回归的鲁棒性,一些实施例可以附加地识别瞬态状态并移除落入瞬态状态的采样点以及移除作为异常值的运行到运行(run-to-run)段(例如,与经历存储器泄漏、存储器不足事件或非常高的增长率的软件执行环境对应的数据段)。
图12显示了三个趋势图,每个趋势图通过针对生产环境中的堆使用量的不同线性回归技术导出。蓝色趋势线1205可以通过标准线性回归算法导出,该算法为每个采样点指派相等的权重。棕色趋势线1210可以通过常规的鲁棒回归算法导出。红色线1215表示由上述本实施例提供的回归,其靠近棕色趋势线。
图13显示了附加图表,其图示了常规回归技术如何会提供不正确的结果。如该图中所示,表示常规回归技术的棕色趋势线1305与两个高密度样本点簇紧密拟合。作为对照,红色线1215正确地跟踪样本点中的趋势,以提供软件执行环境中的堆使用量的长期预测。
图14图示了根据一些实施例的用于生成信号的预测的过程的流程图1400。在一些实施例中,流程图1400中描绘的过程可以由具有一个或多个处理器(例如,图17的计算机系统1700)的计算机系统来实现,其中该一个或多个处理器可以基于存储在计算机可读介质中的计算机代码来执行步骤。图14中描述的步骤可以以任何顺序执行,并且可以有或没有任何其它步骤。
流程图1400开始于步骤1402,其中实施例接收包括在一时间跨度内从正在其中执行一个或多个进程的环境采样的多个度量的信号。在一些实施例中,该多个度量可以是由正在监视软件执行环境(例如,生产环境)内的堆使用量的控制系统获取的堆使用量测量值,其中软件执行环境包括一个或多个执行进程。
在步骤1404处,实施例从信号1404提取季节性效应因子和去季节化分量。在一些实施例中,季节性效应因子可以与针对指派给数据集的时段的每个间隔确定的季节因子对应。在一些实施例中,可以通过将季节因子应用于信号来获得去季节化分量。
在步骤1406处,实施例将一个或多个样条函数应用于季节性效应因子以生成第一模型。在这点上,一些实施例可以对与预期值急剧偏离的样本值赋予相对小的权重,其中预期值表示近邻样本组的卷积。
在步骤1408处,实施例将线性回归技术应用于去季节化分量以生成第二模型。具体而言,为了补偿在高的堆使用量期间经历的相对短的时间间隔,一些实施例可以调整过滤器参数以赋予在短间隔期间获取的样本相对小的权重。一些实施例可以使用速率过滤器参数来修剪数据集中包括的数据点。修剪数据点可以有助于跨整个时间范围均匀采样点的密度,从而提高线性回归算法的鲁棒性。
在步骤1410处,实施例基于第一模型和第二模型生成信号的预测。在一些实施例中,信号的预测可以与使用步骤1406和1408中描述的技术生成的回归线对应。具体而言,所生成的预测可以更好地拟合信号。
在步骤1412处,实施例至少部分地基于预测来发起与环境相关联的一个或多个动作。例如,如果预测指示堆使用量将来会增加,则一些实施例可以将附加资源(例如,存储器、RAM)分配给软件执行环境。
图15描绘了用于实现实施例的分布式系统1500的简化图。在所示实施例中,分布式系统1500包括一个或多个客户端计算设备1502、1504、1506和1508,这些客户端计算设备被配置为通过(一个或多个)网络1510执行和操作客户端应用,诸如web浏览器、专有客户端(例如,Oracle Forms)等等。服务器1512可以经由网络1510与远程客户端计算设备1502、1504、1506和1508通信地耦合。
在各种实施例中,服务器1512可以适于运行一个或多个服务或软件应用。在某些实施例中,服务器1512还可以提供其它服务,或者软件应用可以包括非虚拟和虚拟环境。在一些实施例中,这些服务可以作为基于web的或云服务或者在软件即服务(SaaS)模型下提供给客户端计算设备1502、1504、1506和/或1508的用户。操作客户端计算设备1502、1504、1506和/或1508的用户又可以利用一个或多个客户端应用与服务器1512交互以利用由这些部件提供的服务。
在图15中描绘的配置中,系统1500的软件部件1518、1520和1522被示出为在服务器1512上实现。在其它实施例中,系统1500的一个或多个部件和/或由这些部件提供的服务可以也可以由客户端计算设备1502、1504、1506和/或1508中的一个或多个来实现。然后,操作客户端计算设备的用户可以利用一个或多个客户端应用来使用由这些部件提供的服务。这些部件可以用硬件、固件、软件或其组合来实现。应该理解的是,各种不同的系统配置是可能的,其可以与分布式系统1500不同。因此,图15中所示的实施例是用于实现实施例系统的分布式系统的一个示例,并且不旨在是限制性的。
客户端计算设备1502、1504、1506和/或1508可以包括各种类型的计算系统。例如,客户端计算设备可以包括便携式手持设备(例如,蜂窝电话、计算平板、个人数字助理(PDA))或可穿戴设备(例如,Google 头戴式显示器),其运行诸如Microsoft Windows 之类的软件和/或诸如iOS、Windows Phone、Android、BlackBerry 10,Palm OS之类的各种移动操作系统。设备可以支持各种应用(诸如各种互联网相关的应用、电子邮件、短消息服务(SMS)应用),并且可以使用各种其它通信协议。客户端计算设备还可以包括通用个人计算机,作为示例,运行各种版本的MicrosoftApple 和/或Linux操作系统的个人计算机和/或膝上型计算机。客户端计算设备可以是运行任何各种商用的或类UNIX操作系统(包括但不限于诸如像Google Chrome OS的各种GNU/Linux操作系统)的工作站计算机。客户端计算设备还可以包括能够提供(一个或多个)网络1510通信的电子设备(诸如瘦客户端计算机、启用互联网的游戏系统(例如,具有或不具有手势输入设备的Microsoft 游戏控制台)和/或个人消息传送设备)。
虽然图15中的分布式系统1500被示出具有四个客户端计算设备,但是可以支持任何数量的客户端计算设备。其它设备(例如具有传感器的设备等)可以与服务器1512交互。
分布式系统1500中的(一个或多个)网络1510可以是对本领域技术人员熟悉的可以利用任何各种可用协议支持数据通信的任何类型的网络,其中各种协议包括但不限于TCP/IP(传输控制协议/互联网协议)、SNA(系统网络体系架构)、IPX(互联网分组交换)、AppleTalk等。仅仅作为示例,(一个或多个)网络1510可以是局域网(LAN)、基于以太网的网络、令牌环、广域网、互联网、虚拟网络、虚拟专用网络(VPN)、内联网、外联网、公共交换电话网络(PSTN)、红外网络、无线网络(例如,在任何电气和电子协会(IEEE)802.11协议套件、和/或任何其它无线协议下操作的网络)和/或这些和/或其它网络的任意组合。
服务器1512可以由一个或多个通用计算机、专用服务器计算机(作为示例,包括PC(个人计算机)服务器、服务器、中档服务器、大型计算机、机架安装的服务器等)、服务器场、服务器集群或任何其它适当的布置和/或组合组成。服务器1512可以包括运行虚拟操作系统的一个或多个虚拟机,或涉及虚拟化的其它计算体系架构。一个或多个灵活的逻辑存储设备池可以被虚拟化,以维护用于服务器的虚拟存储设备。虚拟网络可以由服务器1512利用软件定义的联网来控制。在各种实施例中,服务器1512可以适于运行在前述公开内容中描述的一个或多个服务或软件应用。例如,服务器1512可以与根据本公开的实施例的用于如上所述执行处理的服务器对应。
服务器1512可以运行包括以上讨论的任何操作系统的操作系统,以及任何商用的服务器操作系统。服务器1512还可以运行任何各种附加的服务器应用和/或中间层应用,包括HTTP(超文本传输协议)服务器、FTP(文件传输协议)服务器、CGI(公共网关接口)服务器、服务器、数据库服务器等。示例性数据库服务器包括但不限于可从Oracle、Microsoft、Sybase、IBM(国际商业机器)等商业获得的数据库服务器。
在一些实现中,服务器1512可以包括一个或多个应用,以分析和整合从客户端计算设备1502、1504、1506和1508的用户接收到的数据馈送和/或事件更新。作为示例,数据馈送和/或事件更新可以包括但不限于从一个或多个第三方信息源和持续数据流接收到的馈送、更新或实时更新,其可以包括与传感器数据应用、金融报价机、网络性能测量工具(例如,网络监视和流量管理应用)、点击流分析工具、汽车流量监视等相关的实时事件。服务器1512还可以包括经由客户端计算设备1502、1504、1506和1508的一个或多个显示设备显示数据馈送和/或实时事件的一个或多个应用。
分布式系统1500还可以包括一个或多个数据库1514和1516。这些数据库可以提供用于存储信息(诸如用户交互信息、使用模式信息、适应规则信息和由本公开的实施例使用的其它信息)的机制。数据库1514和1516可以驻留在各种位置中。举例来说,数据库1514和1516中的一个或多个可以驻留在服务器1512本地(和/或驻留在服务器1512中)的非瞬态存储介质上。可替代地,数据库1514和1516可以远离服务器1512并经由基于网络的或专用的连接与服务器1512通信。在一组实施例中,数据库1514和1516可以驻留在存储区域网络(SAN)中。类似地,用于执行归属于服务器1512的功能的任何必要文件可以适当地本地存储在服务器1512上和/或远程存储。在一组实施例中,数据库1514和1516可以包括适于响应于SQL格式的命令来存储、更新和检索数据的关系数据库,诸如由Oracle提供的数据库。
在一些实施例中,云环境可以提供一个或多个服务。图16是根据本公开的实施例的、其中服务可以作为云服务被提供的系统环境1600的一个或多个部件的简化框图。在图16中所示的实施例中,系统环境1600包括可以被用户用来与提供云服务的云基础设施系统1602交互的一个或多个客户端计算设备1604、1606和1608。云基础设施系统1602可以包括一个或多个计算机和/或服务器,其可以包括上面针对服务器1612所描述的那些。
应该认识到的是,图16中描绘的云基础设施系统1602可以具有除了所描绘的那些之外的其它部件。另外,图16中所示的实施例仅仅是可以结合本公开的实施例的云基础设施系统的一个示例。在一些其它实施例中,云基础设施系统1602可以具有比图中所示更多或更少的部件、可以组合两个或更多个部件,或者可以具有不同的部件配置或布置。
客户端计算设备1604、1606和1608可以是与上述类似的设备。客户端计算设备1604、1606和1608可以被配置为操作客户端应用,诸如web浏览器、专有客户端应用(例如,Oracle Forms)或者可以由客户端计算设备的用户使用以与云基础设施系统1602交互来使用由云基础设施系统1602提供的服务的一些其它应用。虽然示例性系统环境1600被示为具有三个客户端计算设备,但是可以支持任何数量的客户端计算设备。诸如具有传感器的设备等的其它设备可以与云基础设施系统1602交互。
(一个或多个)网络1610可以促进客户端计算设备1604、1606和1608与云基础设施系统1602之间的数据通信和交换。每个网络可以是对本领域技术人员熟悉的可以利用任何各种商用的协议支持数据通信的任何类型的网络,其中协议包括以上针对(一个或多个)网络1610所描述的协议。
在某些实施例中,由云基础设施系统1602提供的服务可以包括按需对云基础设施系统的用户可用的一系列服务。也可以提供各种其它服务,包括但不限于在线数据存储和备份解决方案、基于Web的电子邮件服务、托管的办公套件和文档协作服务、数据库处理、受管理的技术支持服务等。由云基础架构系统提供的服务可以动态扩展以满足其用户的需求。
在某些实施例中,由云基础设施系统1602提供的服务的具体实例化在本文中可以被称为“服务实例”。一般而言,经由通信网络(诸如互联网)从云服务提供者的系统使得对用户可用的任何服务被称为“云服务”。通常,在公共云环境中,构成云服务提供者的系统的服务器和系统与客户自己的本地服务器和系统不同。例如,云服务提供者的系统可以托管应用,并且用户可以经由诸如互联网的通信网络按需订购和使用应用。
在一些示例中,计算机网络云基础设施中的服务可以包括对存储装置、托管的数据库、托管的web服务器、软件应用或者由云供应商向用户提供的其它服务的受保护的计算机网络访问,或者如本领域中另外已知的。例如,服务可以包括通过互联网对云上的远程存储的受密码保护的访问。作为另一个示例,服务可以包括基于web服务的托管的关系数据库和脚本语言中间件引擎,用于由联网的开发人员私人使用。作为另一个示例,服务可以包括对在云供应商的网站上托管的电子邮件软件应用的访问。
在某些实施例中,云基础设施系统1602可以包括以自助服务、基于订阅、弹性可扩展、可靠、高度可用和安全的方式交付给客户的应用套件、中间件和数据库服务产品。这种云基础设施系统的示例是由本受让人提供的Oracle Public Cloud(Oracle公共云)。
云基础设施系统1602还可以提供与“大数据”相关的计算和分析服务。术语“大数据”一般用来指可由分析员和研究者存储和操纵以可视化大量数据、检测趋势和/或以其它方式与数据交互的极大数据集。这种大数据和相关应用可以在许多级别和不同规模上由基础设施系统托管和/或操纵。并行链接的数十个、数百个或数千个处理器可以作用于这种数据,以便呈现其或者模拟对数据或其所表示的内容的外力。这些数据集可以涉及结构化数据,诸如在数据库中组织或以其它方式根据结构化模型组织的数据,和/或者非结构化数据(例如,电子邮件、图像、数据blob(二进制大对象)、网页、复杂事件处理)。通过利用实施例相对快速地将更多(或更少)的计算资源聚焦在目标上的能力,云基础设施系统可以更好地用于基于来自企业、政府机构、研究组织、私人个人、一群志同道合的个人或组织或其它实体的需求在大数据集上执行任务。
在各种实施例中,云基础设施系统1602可以适于自动地供应、管理和跟踪客户对由云基础设施系统1602提供的服务的订阅。云基础设施系统1602可以经由不同的部署模型提供云服务。例如,服务可以在公共云模型下提供,其中云基础设施系统1602由销售云服务的组织拥有(例如,由Oracle公司拥有)并且使服务对一般公众或不同的工业企业可用。作为另一个示例,服务可以在私有云模型下提供,其中云基础设施系统1602仅针对单个组织操作,并且可以为组织内的一个或多个实体提供服务。云服务还可以在社区云模型下提供,其中云基础设施系统1602和由云基础设施系统1602提供的服务由相关社区中的若干个组织共享。云服务还可以在混合云模型下提供,混合云模型是两个或更多个不同模型的组合。
在一些实施例中,由云基础设施系统1602提供的服务可以包括在软件即服务(SaaS)类别、平台即服务(PaaS)类别、基础设施即服务(IaaS)类别、或包括混合服务的服务的其它类别下提供的一个或多个服务。客户经由订阅订单可以订购由云基础设施系统1602提供的一个或多个服务。云基础设施系统1602然后执行处理,以提供客户的订阅订单中的服务。
在一些实施例中,由云基础设施系统1602提供的服务可以包括但不限于应用服务、平台服务和基础设施服务。在一些示例中,应用服务可以由云基础设施系统经由SaaS平台提供。SaaS平台可以被配置为提供属于SaaS类别的云服务。例如,SaaS平台可以提供在集成的开发和部署平台上构建和交付点播应用套件的能力。SaaS平台可以管理和控制用于提供SaaS服务的底层软件和基础设施。通过利用由SaaS平台提供的服务,客户可以利用在云基础设施系统上执行的应用。客户可以获取应用服务,而无需客户单独购买许可证和支持。可以提供各种不同的SaaS服务。示例包括但不限于为大型组织提供用于销售绩效管理、企业集成和业务灵活性的解决方案的服务。
在一些实施例中,平台服务可以由云基础设施系统1602经由PaaS平台提供。PaaS平台可以被配置为提供属于PaaS类别的云服务。平台服务的示例可以包括但不限于使组织(诸如Oracle)能够在共享的共同体系架构上整合现有应用的服务,以及利用由平台提供的共享服务构建新应用的能力。PaaS平台可以管理和控制用于提供PaaS服务的底层软件和基础设施。客户可以获取由云基础设施系统1602提供的PaaS服务,而无需客户购买单独的许可证和支持。平台服务的示例包括但不限于Oracle Java云服务(JCS)、Oracle数据库云服务(DBCS)以及其它。
通过利用由PaaS平台提供的服务,客户可以采用由云基础设施系统支持的编程语言和工具,并且还控制所部署的服务。在一些实施例中,由云基础设施系统提供的平台服务可以包括数据库云服务、中间件云服务(例如,Oracle Fusion Middleware服务)和Java云服务。在一个实施例中,数据库云服务可以支持共享服务部署模型,其使得组织能够汇集数据库资源并且以数据库云的形式向客户提供数据库即服务。中间件云服务可以为客户提供开发和部署各种业务应用的平台,以及Java云服务可以在云基础设施系统中为客户提供部署Java应用的平台。
可以由云基础设施系统中的IaaS平台提供各种不同的基础设施服务。基础设施服务促进底层计算资源(诸如存储装置、网络和其它基本计算资源)的管理和控制,以便客户利用由SaaS平台和PaaS平台提供的服务。
在某些实施例中,云基础设施系统1602还可以包括基础设施资源1630,用于提供用来向云基础设施系统的客户提供各种服务的资源。在一个实施例中,基础设施资源1630可以包括执行由PaaS平台和SaaS平台提供的服务的硬件(诸如服务器、存储装置和联网资源)的预先集成和优化的组合,以及其它资源。
在一些实施例中,云基础设施系统1602中的资源可以由多个用户共享并且按需动态地重新分配。此外,资源可以分配给在不同时区中的用户。例如,云基础设施系统1602可以使第一时区内的第一用户集合能够利用云基础设施系统的资源指定的小时数,然后使得能够将相同资源重新分配给位于不同时区中的另一用户集合,从而最大化资源的利用率。
在某些实施例中,可以提供由云基础设施系统1602的不同部件或模块共享,以使得能够由云基础设施系统1602供应服务的多个内部共享服务1632。这些内部共享服务可以包括但不限于安全和身份服务、集成服务、企业储存库服务、企业管理器服务、病毒扫描和白名单服务、高可用性、备份和恢复服务、用于启用云支持的服务、电子邮件服务、通知服务、文件传输服务等。
在某些实施例中,云基础设施系统1602可以在云基础设施系统中提供云服务(例如,SaaS、PaaS和IaaS服务)的综合管理。在一个实施例中,云管理功能可以包括用于供应、管理和跟踪由云基础设施系统1602等接收到的客户的订阅的能力。
在一个实施例中,如图16中所绘出的,云管理功能可以由诸如订单管理模块1620、订单编排模块1622、订单供应模块1624、订单管理和监视模块1626以及身份管理模块1628的一个或多个模块提供。这些模块可以包括或可以利用一个或多个计算机和/或服务器提供,该一个或多个计算机和/或服务器可以是通用计算机、专用服务器计算机、服务器场,服务器集群或任何其它适当的布置和/或组合。
在示例性操作中,在步骤1634处,使用客户端设备(诸如客户端计算设备1604、1606或1608)的客户可以通过请求由云基础设施系统1602提供的一个或多个服务并且对由云基础设施系统1602提供的一个或多个服务的订阅下订单来与云基础设施系统1602交互。在某些实施例中,客户可以访问诸如云UI 1612、云UI 1614和/或云UI 1616的云用户界面(UI)并经由这些UI下订阅订单。响应于客户下订单而由云基础设施系统1602接收到的订单信息可以包括识别客户和客户打算订阅的由云基础设施系统1602提供的一个或多个服务的信息。
在步骤1636处,从客户接收到的订单信息可以存储在订单数据库1618中。如果这是新的订单,则可以为该订单创建新的记录。在一个实施例中,订单数据库1618可以是由云基础设施系统1618操作以及与其它系统元素结合操作的若干数据库当中的一个。
在步骤1638处,订单信息可以被转发到订单管理模块1620,订单管理模块1620可以被配置为执行与订单相关的计费和记帐功能,诸如验证订单,并且在通过验证时预订订单。
在步骤1640处,关于订单的信息可以被传送到订单编排模块1622,订单编排模块1622被配置为编排用于由客户下的订单的服务和资源的供应。在一些情况下,订单编排模块1622可以使用订单供应模块1624的服务用于供应。在某些实施例中,订单编排模块1622使得能够管理与每个订单相关联的业务过程,并且应用业务逻辑来确定订单是否应当继续供应。
如图16中绘出的实施例所示,在步骤1642处,在接收到新订阅的订单时,订单编排模块1622向订单供应模块1624发送分配资源和配置履行订购订单所需的资源的请求。订单供应模块1624使得能够为由客户订购的服务分配资源。订单供应模块1624提供由云基础设施系统1600提供的云服务和用来供应用于提供所请求的服务的资源的物理实现层之间的抽象级别。这使得订单编排模块1622能够与实现细节隔离,诸如服务和资源是否实际上实时供应,或者预先供应并且仅在请求时才进行分配/指定。
在步骤1644处,一旦供应了服务和资源,就可以向订阅的客户发送指示所请求的服务现在已准备好用于使用的通知。在一些情况下,可以向客户发送使得客户能够开始使用所请求的服务的信息(例如,链接)。
在步骤1646处,可以由订单管理和监视模块1626来管理和跟踪客户的订阅订单。在一些情况下,订单管理和监视模块1626可以被配置为收集关于客户使用所订阅的服务的使用统计。例如,可以针对所使用的存储量、所传送的数据量、用户的数量以及系统启动时间和系统停机时间的量等来收集统计数据。
在某些实施例中,云基础设施系统1600可以包括身份管理模块1628,其被配置为提供身份服务,诸如云基础设施系统1600中的访问管理和授权服务。在一些实施例中,身份管理模块1628可以控制关于希望利用由云基础设施系统1602提供的服务的客户的信息。这种信息可以包括认证这些客户的身份的信息和描述那些客户被授权相对于各种系统资源(例如,文件、目录、应用、通信端口、存储器段等)执行的动作的信息。身份管理模块1628还可以包括关于每个客户的描述性信息以及关于如何和由谁来访问和修改描述性信息的管理。
图17图示了可以用于实现本公开的实施例的示例性计算机系统1700。在一些实施例中,计算机系统1700可以用于实现上述各种服务器和计算机系统中的任何一种。如图17所示,计算机系统1700包括各种子系统,包括经由总线子系统1702与多个外围子系统通信的处理单元1704。这些外围子系统可以包括处理加速单元1706、I/O子系统1708、存储子系统1718和通信子系统1724。存储子系统1718可以包括有形计算机可读存储介质1722和系统存储器1710。
总线子系统1702提供用于使计算机系统1700的各种部件和子系统按照期望彼此通信的机制。虽然总线子系统1702被示意性地示为单条总线,但是总线子系统的可替代实施例可以利用多条总线。总线子系统1702可以是若干种类型的总线结构中的任何一种,包括存储器总线或存储器控制器、外围总线和利用任何各种总线体系架构的局部总线。例如,此类体系架构可以包括工业标准体系架构(ISA)总线、微通道体系架构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA)局部总线和外围部件互连(PCI)总线,其可以实现为根据IEEE P1386.1标准制造的夹层(Mezzanine)总线,等等。
处理子系统1704控制计算机系统1700的操作并且可以包括一个或多个处理单元1732、1734等。处理单元可以包括一个或多个处理器,其中包括单核或多核处理器、处理器的一个或多个核、或其组合。在一些实施例中,处理子系统1704可以包括一个或多个专用协处理器,诸如图形处理器、数字信号处理器(DSP)等。在一些实施例中,处理子系统1704的处理单元中的一些或全部可以利用定制电路来实现,诸如专用集成电路(ASIC)或现场可编程门阵列(FPGA)。
在一些实施例中,处理子系统1704中的处理单元可以执行存储在系统存储器1710中或计算机可读存储介质1722上的指令。在各种实施例中,处理单元可以执行各种程序或代码指令,并且可以维护多个并发执行的程序或进程。在任何给定的时间,要执行的程序代码中的一些或全部可以驻留在系统存储器1710中和/或计算机可读存储介质1722上,潜在地包括在一个或多个存储设备上。通过适当的编程,处理子系统1704可以提供各种功能。
在某些实施例中,可以提供处理加速单元1706,用于执行定制的处理或用于卸载由处理子系统1704执行的一些处理,以便加速由计算机系统1700执行的整体处理。
I/O子系统1708可以包括用于向计算机系统1700输入信息和/或用于从或经由计算机系统1700输出信息的设备和机制。一般而言,术语“输入设备”的使用旨在包括用于向计算机系统1700输入信息的所有可能类型的设备和机制。用户接口输入设备可以包括,例如,键盘、诸如鼠标或轨迹球的指示设备、结合到显示器中的触摸板或触摸屏、滚轮、点拨轮、拨盘、按钮、开关、键板、具有语音命令识别系统的音频输入设备、麦克风以及其它类型的输入设备。用户接口输入设备也可以包括使用户能够控制输入设备并与其交互的诸如Microsoft 运动传感器的运动感测和/或姿势识别设备、Microsoft 360游戏控制器、提供用于接收利用姿势和口语命令的输入的接口的设备。用户接口输入设备也可以包括眼睛姿势识别设备,诸如从用户检测眼睛活动(例如,当拍摄图片和/或进行菜单选择时的“眨眼”)并将眼睛姿势转换为到输入设备(例如,Google )中的输入的Google 眨眼检测器。此外,用户接口输入设备可以包括使用户能够通过语音命令与语音识别系统(例如,导航器)交互的语音识别感测设备。
用户接口输入设备的其它示例包括但不限于三维(3D)鼠标、操纵杆或指示杆、游戏板和图形平板、以及音频/视频设备,诸如扬声器、数字相机、数字摄像机、便携式媒体播放器、网络摄像机、图像扫描仪、指纹扫描仪、条形码读取器3D扫描仪、3D打印机、激光测距仪、以及眼睛注视跟踪设备。此外,用户接口输入设备可以包括,例如,医疗成像输入设备,诸如计算机断层摄影、磁共振成像、位置发射断层摄影、医疗超声检查设备。用户接口输入设备也可以包括,例如,音频输入设备,诸如MIDI键盘、数字乐器等。
用户接口输出设备可以包括显示子系统、指示器灯或诸如音频输出设备的非可视显示器等。显示子系统可以是阴极射线管(CRT)、诸如利用液晶显示器(LCD)或等离子体显示器的平板设备、投影设备、触摸屏等。一般而言,术语“输出设备”的使用旨在包括用于从计算机系统1700向用户或其它计算机输出信息的所有可能类型的设备和机制。例如,用户接口输出设备可以包括但不限于,可视地传达文本、图形和音频/视频信息的各种显示设备,诸如监视器、打印机、扬声器、耳机、汽车导航系统、绘图仪、语音输出设备和调制解调器。
存储子系统1718提供用于存储由计算机系统1700使用的信息的储存库或数据存储。存储子系统1718提供有形非瞬态计算机可读存储介质,用于存储提供一些实施例的功能的基本编程和数据结构。当由处理子系统1704执行时提供上述功能的软件(程序、代码模块、指令)可以存储在存储子系统1718中。软件可以由处理子系统1704的一个或多个处理单元执行。存储子系统1718也可以提供用于存储根据本公开使用的数据的储存库。
存储子系统1718可以包括一个或多个非瞬态存储器设备,包括易失性和非易失性存储器设备。如图17所示,存储子系统1718包括系统存储器1710和计算机可读存储介质1722。系统存储器1710可以包括多个存储器,包括用于在程序执行期间存储指令和数据的易失性主随机存取存储器(RAM)和其中存储固定指令的非易失性只读存储器(ROM)或闪存存储器。在一些实现中,包含帮助在诸如启动期间在计算机系统1700内的元件之间传送信息的基本例程的基本输入/输出系统(BIOS)通常可以存储在ROM中。RAM通常包含当前由处理子系统1704操作和执行的数据和/或程序模块。在一些实现中,系统存储器1710可以包括多个不同类型的存储器,诸如静态随机存取存储器(SRAM)或动态随机存取存储器(DRAM)。
作为示例而非限制,如在图17中所绘出的,系统存储器1710可以存储应用程序1712,其可以包括客户端应用、Web浏览器、中间层应用、关系数据库管理系统(RDBMS)等、程序数据1714和操作系统1716。作为示例,操作系统1716可以包括各种版本的MicrosoftApple 和/或Linux操作系统、各种商用或类UNIX操作系统(包括但不限于各种GNU/Linux操作系统、Google OS等)和/或诸如iOS、 Phone、 OS、10OS和 OS操作系统的移动操作系统。
计算机可读存储介质1722可以存储提供一些实施例的功能的编程和数据结构。当由处理子系统1704执行时使处理器提供上述功能的软件(程序、代码模块、指令)可以存储在存储子系统1718中。作为示例,计算机可读存储介质1722可以包括非易失性存储器,诸如硬盘驱动器、磁盘驱动器、诸如CD ROM、DVD、(蓝光)盘或其它光学介质的光盘驱动器。计算机可读存储介质1722可以包括但不限于,驱动器、闪存存储器卡、通用串行总线(USB)闪存驱动器、安全数字(SD)卡、DVD盘、数字视频带等。计算机可读存储介质1722也可以包括基于非易失性存储器的固态驱动器(SSD)(诸如基于闪存存储器的SSD、企业闪存驱动器、固态ROM等)、基于易失性存储器的SSD(诸如基于固态RAM、动态RAM、静态RAM、DRAM的SSD、磁阻RAM(MRAM)SSD),以及使用基于DRAM和基于闪存存储器的SSD的组合的混合SSD。计算机可读介质1722可以为计算机系统1700提供计算机可读指令、数据结构、程序模块和其它数据的存储。
在某些实施例中,存储子系统1700也可以包括计算机可读存储介质读取器1720,其可以进一步连接到计算机可读存储介质1722。可选地,与系统存储器1710一起和组合,计算机可读存储介质1722可以全面地表示远程、本地、固定和/或可移除存储设备加上用于存储计算机可读信息的存储介质。
在某些实施例中,计算机系统1700可以提供对执行一个或多个虚拟机的支持。计算机系统1700可以执行诸如管理程序之类的程序,以便促进虚拟机的配置和管理。每个虚拟机可以被分配存储器、计算(例如,处理器、内核)、I/O和联网资源。每个虚拟机通常运行其自己的操作系统,其可以与由计算机系统1700执行的其它虚拟机执行的操作系统相同或不同。相应地,多个操作系统可以潜在地由计算机系统1700并发地运行。每个虚拟机一般独立于其它虚拟机运行。
通信子系统1724提供到其它计算机系统和网络的接口。通信子系统1724用作用于从计算机系统1700的其它系统接收数据和向其发送数据的接口。例如,通信子系统1724可以使计算机系统1700能够经由互联网建立到一个或多个客户端计算设备的通信信道,用于从客户端设备接收信息和发送信息到客户端计算设备。
通信子系统1724可以支持有线和/或无线通信协议两者。例如,在某些实施例中,通信子系统1724可以包括用于(例如,使用蜂窝电话技术、高级数据网络技术(诸如3G、4G或EDGE(全球演进的增强数据速率)、WiFi(IEEE 802.11族标准)、或其它移动通信技术、或其任意组合)接入无线语音和/或数据网络的射频(RF)收发器部件、全球定位系统(GPS)接收器部件和/或其它部件。在一些实施例中,作为无线接口的附加或替代,通信子系统1724可以提供有线网络连接(例如,以太网)。
通信子系统1724可以以各种形式接收和发送数据。例如,在一些实施例中,通信子系统1724可以以结构化和/或非结构化的数据馈送1726、事件流1728、事件更新1730等形式接收输入通信。例如,通信子系统1724可以被配置为实时地从社交媒体网络的用户和/或诸如馈送、更新、诸如丰富站点摘要(RSS)馈送的web馈送的其它通信服务接收(或发送)数据馈送1726,和/或来自一个或多个第三方信息源的实时更新。
在某些实施例中,通信子系统1724可以被配置为以连续数据流的形式接收本质上可能是连续的或无界的没有明确结束的数据,其中连续数据流可以包括实时事件的事件流1728和/或事件更新1730。生成连续数据的应用的示例可以包括例如传感器数据应用、金融报价机、网络性能测量工具(例如网络监视和流量管理应用)、点击流分析工具、汽车流量监视等。
通信子系统1724也可以被配置为向一个或多个数据库输出结构化和/或非结构化的数据馈送1726、事件流1728、事件更新1730等,其中所述一个或多个数据库可以与耦合到计算机系统1700的一个或多个流数据源计算机通信。
计算机系统1700可以是各种类型中的一种,包括手持便携式设备(例如,蜂窝电话、计算平板、PDA)、可穿戴设备(例如,Google 头戴式显示器)、个人计算机、工作站、大型机、信息站、服务器机架或任何其它数据处理系统。
由于计算机和网络不断变化的性质,对图17中绘出的计算机系统1700的描述旨在仅仅作为具体示例。具有比图17中所绘出的系统更多或更少部件的许多其它配置是可能的。基于本文所提供的公开内容和教导,本领域普通技术人员将理解实现各种实施例的其它方式和/或方法。
虽然已经描述了本公开的具体实施例,但是各种修改、变更、替代构造和等同物也包含在本公开的范围内。修改包括所公开特征的任何相关组合。本公开的实施例不限于在某些特定数据处理环境内的操作,而是可以在多个数据处理环境内自由操作。此外,虽然已使用特定系列的事务和步骤描述了本公开的实施例,然而,对本领域技术人员应当清楚的是,本公开的范围不限于所描述系列的事务和步骤。上述实施例的各种特征和方面可以被单独或结合使用。
此外,虽然已经使用硬件和软件的特定组合描述了本公开的实施例,但是应该认识到的是,硬件和软件的其它组合也在本公开的范围内。本公开的实施例可以只用硬件、或只用软件、或利用其组合来实现。本文描述的各种进程可以在同一处理器或以任何组合的不同处理器上实现。相应地,在部件或模块被描述为被配置为执行某些操作的情况下,这种配置可以例如通过设计电子电路来执行操作、通过对可编程电子电路(诸如微处理器)进行编程来执行操作、或其任意组合来实现。进程可以利用各种技术来通信,包括但不限于用于进程间通信的常规技术,并且不同的进程对可以使用不同的技术,或者同一对进程可以在不同时间使用不同的技术。
因而,说明书和附图应当在说明性而不是限制性的意义上考虑。然而,将清楚的是,在不背离权利要求中阐述的更广泛精神和范围的情况下,可以对其进行添加、减少、删除和其它修改和改变。因此,虽然已描述了具体的实施例,但是这些实施例不旨在进行限制。各种修改和等效物都在以下权利要求的范围之内。
Claims (20)
1.一种计算机实现的方法,包括:
由计算机至少部分地基于一个或多个栈踪迹确定引用一组线性连接的栈帧的栈段的过滤器状态;
接收栈踪迹;
在接收到所述栈踪迹后,至少部分地基于所述栈踪迹沿着所述栈段的所述一组线性连接的栈帧检测分支点;
在沿着所述栈段的所述一组线性连接的栈帧检测到分支点后,将所述栈段分割成多个新栈段,所述多个新栈段各自包括所述栈帧的子集,其中所述多个新栈段被所述栈段引用;
至少部分地基于所述栈段的过滤器状态来初始化与所述多个新栈段对应的多个过滤器状态;以及
至少部分地基于一个或多个后续栈踪迹,分别跟踪所述栈段的过滤器状态和与所述多个新栈段对应的所述多个过滤器状态中的每一个。
2.如权利要求1所述的计算机实现的方法,其中,在分层关系中,所述多个新栈段中的每一个是子节点,并且所述栈段是父节点。
3.如权利要求2所述的计算机实现的方法,其中,将所述栈段分割成所述多个新栈段包括:
创建第一新栈段和第二新栈段,第一新栈段引用所述一组线性连接的栈帧的在所述分支点之前的线性连接的栈帧的第一子集,并且第二新栈段引用所述一组线性连接的栈帧的在所述分支点之后的线性连接的栈帧的第二子集;以及
修改所述栈段以引用第一新栈段作为第一子节点和引用第二新栈段作为第二子节点;以及
其中,第一新栈段和第二新栈段引用所述栈段作为父节点。
4.如权利要求1所述的计算机实现的方法,其中,至少部分地基于所述一个或多个栈踪迹确定所述栈段的过滤器状态包括:
接收所述一个或多个栈踪迹中的第一个栈踪迹;
观察所述一个或多个栈踪迹中的所述第一个栈踪迹包括所述一组线性连接的栈帧中的每一个栈帧;
创建所述栈段以引用所述一组线性连接的栈帧;
对于除所述一个或多个栈踪迹中的所述第一个栈踪迹之外的所述一个或多个栈踪迹中的每一个栈踪迹:
接收所述一个或多个栈踪迹中的该栈踪迹;
观察所述一个或多个栈踪迹中的该栈踪迹包括所述一组线性连接的栈帧中的每一个栈帧或者不包括所述一组线性连接的栈帧中的所有栈帧;以及
至少部分地基于所述一个或多个栈踪迹的栈踪迹来更新所述栈段的过滤器状态。
5.如权利要求1所述的计算机实现的方法,其中,至少部分地基于所述栈段的过滤器状态来初始化与所述多个新栈段对应的所述多个过滤器状态包括将所述栈段的过滤器状态复制到与所述多个新栈段对应的所述多个过滤器状态。
6.如权利要求1所述的计算机实现的方法,其中,所述多个新栈段中的每个新栈段中的栈帧的子集保持线性连接。
7.如权利要求1所述的计算机实现的方法:
其中,如果已经观察到至少一个栈踪迹包括第一栈帧和第二栈帧两者,并且没有观察到包括第一栈帧和第二栈帧中的仅一者的栈踪迹,则第一栈帧线性连接到第二栈帧;以及
其中,如果已观察到另一个至少一个栈踪迹包括第一栈帧和第二栈帧中的仅所述一者,则第一栈帧和第二栈帧不是线性连接的。
8.如权利要求1所述的计算机实现的方法,其中,所述过滤器状态包括:
已经观察到所述一组线性连接的栈帧的次数;
所述一组线性连接的栈帧的强度的一个或多个度量,其中强度的所述一个或多个度量中的每一个度量与时间段的不同季节相关联;
一个或多个季节因子,其中所述一个或多个季节因子中的每个季节因子与所述一组线性连接的栈帧的强度的所述一个或多个度量中的一个度量相关联;
或者,以上的组合。
9.如权利要求1所述的计算机实现的方法,其中,所述一个或多个栈踪迹、所述栈踪迹,以及所述一个或多个后续栈踪迹是经由在执行多线程程序期间获取的一个或多个线程转储获得的。
10.一种系统,包括:
一个或多个处理器;以及
所述一个或多个处理器能够访问的存储器,所述存储器存储一条或多条指令,所述一条或多条指令当由所述一个或多个处理器执行时使所述一个或多个处理器:
至少部分地基于一个或多个栈踪迹监视引用一组线性连接的栈帧的栈段的过滤器状态;
接收栈踪迹;
在接收到所述栈踪迹后,至少部分地基于所述栈踪迹沿着所述栈段的所述一组线性连接的栈帧检测分支点;
在沿着所述栈段的所述一组线性连接的栈帧检测到分支点后,将所述栈段分割成多个新栈段,所述多个新栈段各自包括所述栈帧的子集,其中所述多个新栈段被所述栈段引用;
至少部分地基于所述栈段的过滤器状态来初始化与所述多个新栈段对应的多个过滤器状态;以及
至少部分地基于一个或多个后续栈踪迹,分别跟踪所述栈段的过滤器状态和与所述多个新栈段对应的所述多个过滤器状态中的每一个。
11.如权利要求10所述的系统,其中,在分层关系中,所述多个新栈段中的每一个新栈段是子节点,并且所述栈段是父节点。
12.如权利要求11所述的系统,其中,将所述栈段分割成所述多个新栈段包括:
创建第一新栈段和第二新栈段,第一新栈段引用所述一组线性连接的栈帧的在所述分支点之前的线性连接的栈帧的第一子集,并且第二新栈段引用所述一组线性连接的栈帧的在所述分支点之后的线性连接的栈帧的第二子集;以及
修改所述栈段以引用第一新栈段作为第一子节点和引用第二新栈段作为第二子节点;以及
其中,第一新栈段和第二新栈段引用所述栈段作为父节点。
13.如权利要求10所述的系统,其中,至少部分地基于所述一个或多个栈踪迹确定所述栈段的过滤器状态包括:
接收所述一个或多个栈踪迹中的第一个栈踪迹;
观察所述一个或多个栈踪迹中的所述第一个栈踪迹包括所述一组线性连接的栈帧中的每一个栈帧;
创建所述栈段以引用所述一组线性连接的栈帧;
对于除所述一个或多个栈踪迹中的所述第一个栈踪迹之外的所述一个或多个栈踪迹中的每一个栈踪迹:
接收所述一个或多个栈踪迹中的该栈踪迹;
观察所述一个或多个栈踪迹中;的该栈踪迹包括所述一组线性连接的栈帧中的每一个栈帧或者不包括所述一组线性连接的栈帧中的任何栈帧;以及
至少部分地基于所述一个或多个栈踪迹中的栈踪迹来更新所述栈段的过滤器状态。
14.如权利要求10所述的系统,其中,至少部分地基于所述栈段的过滤器状态来初始化与所述多个新栈段对应的所述多个过滤器状态包括将所述栈段的过滤器状态复制到与所述多个新栈段对应的所述多个过滤器状态。
15.如权利要求10所述的系统,其中,所述多个新栈段中的每一个新栈段中的栈帧的子集保持线性连接。
16.如权利要求10所述的系统:
其中,如果已经观察到至少一个栈踪迹包括第一栈帧和第二栈帧两者,并且没有观察到包括第一栈帧和第二栈帧中的仅一者的栈踪迹,则第一栈帧线性连接到第二栈帧;以及
其中,如果已观察到另一个至少一个栈踪迹包括第一栈帧和第二栈帧中的仅所述一者,则第一栈帧和第二栈帧不是线性连接的。
17.如权利要求10所述的系统,其中,所述过滤器状态包括:
已经观察到所述一组线性连接的栈帧的次数;
所述一组线性连接的栈帧的强度的一个或多个度量,其中强度的所述一个或多个度量中的每一个度量与时间段的不同季节相关联;
一个或多个季节因子,其中所述一个或多个季节因子中的每一个季节因子与所述一组线性连接的栈帧的强度的所述一个或多个度量中的一个度量相关联;
或者,以上的组合。
18.如权利要求10所述的系统,其中,所述一个或多个栈踪迹、所述栈踪迹、以及所述一个或多个后续栈踪迹是经由在执行多线程程序期间获取的一个或多个线程转储获得的。
19.一种存储一条或多条指令的非瞬态计算机可读介质,所述一条或多条指令当由一个或多个处理器执行时使得所述一个或多个处理器:
至少部分地基于一个或多个栈踪迹监视引用一组线性连接的栈帧的栈段的过滤器状态;
接收栈踪迹;
在接收到所述栈踪迹后,至少部分地基于所述栈踪迹沿着所述栈段的所述一组线性连接的栈帧检测分支点;
在沿着所述栈段的所述一组线性连接的栈帧检测到分支点后,将所述栈段分割成多个新栈段,所述多个新栈段各自包括所述栈帧的子集,其中所述多个新栈段被所述栈段引用;
至少部分地基于所述栈段的过滤器状态来初始化与所述多个新栈段对应的多个过滤器状态;以及
至少部分地基于一个或多个后续栈踪迹,分别跟踪所述栈段的过滤器状态和与所述多个新栈段对应的所述多个过滤器状态中的每一个。
20.如权利要求19所述的非瞬态计算机可读介质,其中,至少部分地基于所述栈段的过滤器状态来初始化与所述多个新栈段对应的所述多个过滤器状态包括将所述栈段的过滤器状态复制到与所述多个新栈段对应的所述多个过滤器状态。
Applications Claiming Priority (21)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662333798P | 2016-05-09 | 2016-05-09 | |
US201662333811P | 2016-05-09 | 2016-05-09 | |
US201662333804P | 2016-05-09 | 2016-05-09 | |
US201662333809P | 2016-05-09 | 2016-05-09 | |
US201662333786P | 2016-05-09 | 2016-05-09 | |
US62/333,811 | 2016-05-09 | ||
US62/333,809 | 2016-05-09 | ||
US62/333,798 | 2016-05-09 | ||
US62/333,786 | 2016-05-09 | ||
US62/333,804 | 2016-05-09 | ||
US201662340256P | 2016-05-23 | 2016-05-23 | |
US62/340,256 | 2016-05-23 | ||
US15/588,531 US10534643B2 (en) | 2016-05-09 | 2017-05-05 | Correlation of thread intensity and heap usage to identify heap-hoarding stack traces |
US15/588,526 | 2017-05-05 | ||
US15/588,521 US10417111B2 (en) | 2016-05-09 | 2017-05-05 | Correlation of stack segment intensity in emergent relationships |
US15/588,523 | 2017-05-05 | ||
US15/588,521 | 2017-05-05 | ||
US15/588,526 US11327797B2 (en) | 2016-05-09 | 2017-05-05 | Memory usage determination techniques |
US15/588,523 US10467123B2 (en) | 2016-05-09 | 2017-05-05 | Compression techniques for encoding stack trace information |
US15/588,531 | 2017-05-05 | ||
PCT/US2017/031594 WO2017196749A1 (en) | 2016-05-09 | 2017-05-08 | Correlation of stack segment intensity in emergent relationships |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109313602A true CN109313602A (zh) | 2019-02-05 |
CN109313602B CN109313602B (zh) | 2022-05-24 |
Family
ID=60242506
Family Applications (5)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780036490.2A Active CN109313599B (zh) | 2016-05-09 | 2017-05-08 | 将线程强度和堆使用量相关以识别堆囤积的栈踪迹 |
CN202210533901.1A Pending CN114896127A (zh) | 2016-05-09 | 2017-05-08 | 用于编码栈踪迹信息的方法、系统和介质 |
CN201780036496.XA Active CN109313600B (zh) | 2016-05-09 | 2017-05-08 | 存储器使用量确定技术 |
CN201780036497.4A Active CN109313602B (zh) | 2016-05-09 | 2017-05-08 | 处理紧急关系中栈段强度的相关性的系统、方法和介质 |
CN201780036501.7A Active CN109313601B (zh) | 2016-05-09 | 2017-05-08 | 用于编码栈踪迹信息的方法、系统和介质 |
Family Applications Before (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780036490.2A Active CN109313599B (zh) | 2016-05-09 | 2017-05-08 | 将线程强度和堆使用量相关以识别堆囤积的栈踪迹 |
CN202210533901.1A Pending CN114896127A (zh) | 2016-05-09 | 2017-05-08 | 用于编码栈踪迹信息的方法、系统和介质 |
CN201780036496.XA Active CN109313600B (zh) | 2016-05-09 | 2017-05-08 | 存储器使用量确定技术 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780036501.7A Active CN109313601B (zh) | 2016-05-09 | 2017-05-08 | 用于编码栈踪迹信息的方法、系统和介质 |
Country Status (4)
Country | Link |
---|---|
US (9) | US11327797B2 (zh) |
EP (4) | EP3455735A1 (zh) |
JP (8) | JP6913695B2 (zh) |
CN (5) | CN109313599B (zh) |
Families Citing this family (56)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10740358B2 (en) | 2013-04-11 | 2020-08-11 | Oracle International Corporation | Knowledge-intensive data processing system |
US10205640B2 (en) | 2013-04-11 | 2019-02-12 | Oracle International Corporation | Seasonal trending, forecasting, anomaly detection, and endpoint prediction of java heap usage |
US10725800B2 (en) | 2015-10-16 | 2020-07-28 | Dell Products L.P. | User-specific customization for command interface |
US10748116B2 (en) * | 2015-10-16 | 2020-08-18 | Dell Products L.P. | Test vector generation from documentation |
US10931593B2 (en) * | 2016-03-30 | 2021-02-23 | Nec Corporation | Management node, management system, management method and computer-readable recording medium |
US11327797B2 (en) | 2016-05-09 | 2022-05-10 | Oracle International Corporation | Memory usage determination techniques |
US10732714B2 (en) | 2017-05-08 | 2020-08-04 | Cirrus Logic, Inc. | Integrated haptic system |
FR3067486B1 (fr) * | 2017-06-09 | 2021-08-27 | Cryptosense | Procede de detection non intrusif des failles de securite d'un programme informatique |
US11259121B2 (en) | 2017-07-21 | 2022-02-22 | Cirrus Logic, Inc. | Surface speaker |
US10635570B2 (en) * | 2017-09-29 | 2020-04-28 | Oracle International Corporation | Memory leak profiling events |
US11139767B2 (en) | 2018-03-22 | 2021-10-05 | Cirrus Logic, Inc. | Methods and apparatus for driving a transducer |
US10832537B2 (en) | 2018-04-04 | 2020-11-10 | Cirrus Logic, Inc. | Methods and apparatus for outputting a haptic signal to a haptic transducer |
US11069206B2 (en) | 2018-05-04 | 2021-07-20 | Cirrus Logic, Inc. | Methods and apparatus for outputting a haptic signal to a haptic transducer |
JP7056765B2 (ja) * | 2018-06-04 | 2022-04-19 | 日本電気株式会社 | 情報処理装置、制御方法および非一時的記憶媒体 |
US11269415B2 (en) | 2018-08-14 | 2022-03-08 | Cirrus Logic, Inc. | Haptic output systems |
US10613894B1 (en) * | 2018-08-15 | 2020-04-07 | Lendingclub Corporation | State analysis for one or more virtual machines |
US10970055B2 (en) * | 2018-08-21 | 2021-04-06 | International Business Machines Corporation | Identifying software and hardware bottlenecks |
US11068375B2 (en) * | 2018-10-17 | 2021-07-20 | Oracle International Corporation | System and method for providing machine learning based memory resiliency |
GB201817495D0 (en) | 2018-10-26 | 2018-12-12 | Cirrus Logic Int Semiconductor Ltd | A force sensing system and method |
KR102456023B1 (ko) * | 2019-02-13 | 2022-10-19 | 한국전자통신연구원 | 클라우드 컴퓨팅 기반의 시뮬레이션 장치 및 방법 |
US10726683B1 (en) | 2019-03-29 | 2020-07-28 | Cirrus Logic, Inc. | Identifying mechanical impedance of an electromagnetic load using a two-tone stimulus |
US10955955B2 (en) | 2019-03-29 | 2021-03-23 | Cirrus Logic, Inc. | Controller for use in a device comprising force sensors |
US11509292B2 (en) | 2019-03-29 | 2022-11-22 | Cirrus Logic, Inc. | Identifying mechanical impedance of an electromagnetic load using least-mean-squares filter |
US20200313529A1 (en) | 2019-03-29 | 2020-10-01 | Cirrus Logic International Semiconductor Ltd. | Methods and systems for estimating transducer parameters |
US11644370B2 (en) | 2019-03-29 | 2023-05-09 | Cirrus Logic, Inc. | Force sensing with an electromagnetic load |
US10992297B2 (en) * | 2019-03-29 | 2021-04-27 | Cirrus Logic, Inc. | Device comprising force sensors |
US12035445B2 (en) | 2019-03-29 | 2024-07-09 | Cirrus Logic Inc. | Resonant tracking of an electromagnetic load |
US10828672B2 (en) | 2019-03-29 | 2020-11-10 | Cirrus Logic, Inc. | Driver circuitry |
US10976825B2 (en) | 2019-06-07 | 2021-04-13 | Cirrus Logic, Inc. | Methods and apparatuses for controlling operation of a vibrational output system and/or operation of an input sensor system |
US11150733B2 (en) | 2019-06-07 | 2021-10-19 | Cirrus Logic, Inc. | Methods and apparatuses for providing a haptic output signal to a haptic actuator |
CN114008569A (zh) | 2019-06-21 | 2022-02-01 | 思睿逻辑国际半导体有限公司 | 用于在装置上配置多个虚拟按钮的方法和设备 |
US11340924B2 (en) * | 2019-06-27 | 2022-05-24 | International Business Machines Corporation | Machine-learning based heap memory tuning |
CN110489179B (zh) * | 2019-08-02 | 2022-12-27 | 北京字节跳动网络技术有限公司 | 获取调用栈栈帧函数签名的方法、装置、介质和设备 |
US10833960B1 (en) * | 2019-09-04 | 2020-11-10 | International Business Machines Corporation | SLA management in composite cloud solutions using blockchain |
US11408787B2 (en) | 2019-10-15 | 2022-08-09 | Cirrus Logic, Inc. | Control methods for a force sensor system |
US11068393B2 (en) | 2019-10-17 | 2021-07-20 | Microsoft Technology Licensing, Llc | Enhanced concurrency garbage collection stack scanning |
JP7467064B2 (ja) * | 2019-10-17 | 2024-04-15 | キオクシア株式会社 | メモリシステムおよびガベッジコレクション制御方法 |
US11380175B2 (en) | 2019-10-24 | 2022-07-05 | Cirrus Logic, Inc. | Reproducibility of haptic waveform |
US11545951B2 (en) | 2019-12-06 | 2023-01-03 | Cirrus Logic, Inc. | Methods and systems for detecting and managing amplifier instability |
US12093414B1 (en) * | 2019-12-09 | 2024-09-17 | Amazon Technologies, Inc. | Efficient detection of in-memory data accesses and context information |
JP7434925B2 (ja) * | 2020-01-23 | 2024-02-21 | 日本電気株式会社 | 情報処理装置、情報処理方法およびプログラム |
US11662821B2 (en) | 2020-04-16 | 2023-05-30 | Cirrus Logic, Inc. | In-situ monitoring, calibration, and testing of a haptic actuator |
CN111797006B (zh) * | 2020-06-11 | 2022-06-21 | 新奇点智能科技集团有限公司 | 一种线程测试的方法、装置、设备以及存储介质 |
CN111817910B (zh) * | 2020-06-22 | 2021-08-13 | 电子科技大学 | 一种网络流量的网络级测量方法 |
US12039031B2 (en) * | 2020-09-16 | 2024-07-16 | Cisco Technology, Inc. | Security policies for software call stacks |
CN112199449B (zh) * | 2020-09-23 | 2021-09-14 | 况客科技(北京)有限公司 | 数据处理系统 |
CN112286933B (zh) * | 2020-10-28 | 2021-09-14 | 况客科技(北京)有限公司 | 数据处理系统 |
US11933822B2 (en) | 2021-06-16 | 2024-03-19 | Cirrus Logic Inc. | Methods and systems for in-system estimation of actuator parameters |
US11908310B2 (en) | 2021-06-22 | 2024-02-20 | Cirrus Logic Inc. | Methods and systems for detecting and managing unexpected spectral content in an amplifier system |
US11765499B2 (en) | 2021-06-22 | 2023-09-19 | Cirrus Logic Inc. | Methods and systems for managing mixed mode electromechanical actuator drive |
US11720471B2 (en) * | 2021-08-09 | 2023-08-08 | International Business Machines Corporation | Monitoring stack memory usage to optimize programs |
US12106984B2 (en) * | 2021-11-23 | 2024-10-01 | Applied Materials, Inc. | Accelerating preventative maintenance recovery and recipe optimizing using machine-learning based algorithm |
US11552649B1 (en) | 2021-12-03 | 2023-01-10 | Cirrus Logic, Inc. | Analog-to-digital converter-embedded fixed-phase variable gain amplifier stages for dual monitoring paths |
US12112151B2 (en) | 2022-08-31 | 2024-10-08 | Microsoft Technology Licensing, Llc | Collection and representation of program call stacks |
WO2024049570A1 (en) * | 2022-08-31 | 2024-03-07 | Microsoft Technology Licensing, Llc | Collection and representation of program call stacks |
US11947531B1 (en) * | 2023-02-14 | 2024-04-02 | Oracle International Corporation | Copy avoidance via static analysis for DBMS querying |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6751789B1 (en) * | 1997-12-12 | 2004-06-15 | International Business Machines Corporation | Method and system for periodic trace sampling for real-time generation of segments of call stack trees augmented with call stack position determination |
US20100235815A1 (en) * | 2009-03-13 | 2010-09-16 | Microsoft Corporation | Simultaneously displaying multiple call stacks in an interactive debugger |
CN105144112A (zh) * | 2013-04-11 | 2015-12-09 | 甲骨文国际公司 | Java堆使用的季节趋势、预报、异常检测和端点预测 |
CN105556466A (zh) * | 2013-10-30 | 2016-05-04 | 国际商业机器公司 | 代码堆栈管理 |
Family Cites Families (175)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE3726192A1 (de) | 1987-08-06 | 1989-02-16 | Otto Mueller | Stacksteuerung |
US5928369A (en) * | 1996-06-28 | 1999-07-27 | Synopsys, Inc. | Automatic support system and method based on user submitted stack trace |
US6167535A (en) | 1997-12-09 | 2000-12-26 | Sun Microsystems, Inc. | Object heap analysis techniques for discovering memory leaks and other run-time information |
US6560773B1 (en) | 1997-12-12 | 2003-05-06 | International Business Machines Corporation | Method and system for memory leak detection in an object-oriented environment during real-time trace processing |
US6055492A (en) | 1997-12-12 | 2000-04-25 | International Business Machines Corporation | System and method for providing trace information data reduction |
US6002872A (en) | 1998-03-31 | 1999-12-14 | International Machines Corporation | Method and apparatus for structured profiling of data processing systems and applications |
US6839725B2 (en) | 2000-05-16 | 2005-01-04 | Sun Microsystems, Inc. | Dynamic adaptive tenuring of objects |
US6968557B1 (en) | 2000-12-18 | 2005-11-22 | Stratum8 Corporation | Reducing stack memory resources in a threaded computer system |
US7320125B2 (en) | 2001-05-24 | 2008-01-15 | Techtracker, Inc. | Program execution stack signatures |
US6898737B2 (en) | 2001-05-24 | 2005-05-24 | Microsoft Corporation | Automatic classification of event data |
US6754796B2 (en) | 2001-07-31 | 2004-06-22 | Sun Microsystems, Inc. | Frameworks for implementation of java heaps |
US6934942B1 (en) | 2001-08-24 | 2005-08-23 | Microsoft Corporation | System and method for using data address sequences of a program in a software development tool |
US7802236B2 (en) | 2002-09-09 | 2010-09-21 | The Regents Of The University Of California | Method and apparatus for identifying similar regions of a program's execution |
US20040054991A1 (en) | 2002-09-17 | 2004-03-18 | Harres John M. | Debugging tool and method for tracking code execution paths |
US7035846B2 (en) | 2002-09-23 | 2006-04-25 | International Business Machines Corporation | Methods, computer programs and apparatus for caching directory queries |
US6670897B1 (en) | 2002-10-03 | 2003-12-30 | Motorola, Inc. | Compression/decompression techniques based on tokens and Huffman coding |
US7100079B2 (en) | 2002-10-22 | 2006-08-29 | Sun Microsystems, Inc. | Method and apparatus for using pattern-recognition to trigger software rejuvenation |
US7071940B2 (en) | 2002-10-30 | 2006-07-04 | Iviz, Inc. | Interactive data visualization and charting framework with self-detection of data commonality |
CA2417074C (en) * | 2003-01-24 | 2009-07-21 | Pratt & Whitney Canada Corp. | Method and system for trend detection and analysis |
US7072918B2 (en) | 2003-03-24 | 2006-07-04 | Sun Microsystems, Inc. | Remembered-set scrubbing to remove stale entries in an incremental garbage collector |
US7249286B1 (en) * | 2003-03-24 | 2007-07-24 | Network Appliance, Inc. | System and method for automatically diagnosing protocol errors from packet traces |
US7568003B2 (en) | 2003-03-28 | 2009-07-28 | Microsoft Corporation | Publishing interface for publishing content from a content-authoring application to a content server |
WO2004099985A1 (ja) | 2003-05-09 | 2004-11-18 | Fujitsu Limited | 実行環境の危険予測/回避方法,システム,プログラムおよびその記録媒体 |
US7529786B2 (en) | 2003-07-30 | 2009-05-05 | Bea Systems, Inc. | System and method for adaptive garbage collection in a virtual machine environment |
US7089273B2 (en) | 2003-08-01 | 2006-08-08 | Intel Corporation | Method and apparatus for improving the performance of garbage collection using stack trace cache |
US7412694B2 (en) | 2003-09-18 | 2008-08-12 | International Business Machines Corporation | Detecting program phases with periodic call-stack sampling during garbage collection |
US7257657B2 (en) | 2003-11-06 | 2007-08-14 | International Business Machines Corporation | Method and apparatus for counting instruction execution and data accesses for specific types of instructions |
US7149870B2 (en) * | 2004-06-04 | 2006-12-12 | International Business Machines Corporation | Assigning sections within a memory heap for efficient garbage collection of large objects |
US7685575B1 (en) | 2004-06-08 | 2010-03-23 | Sun Microsystems, Inc. | Method and apparatus for analyzing an application |
US7480648B2 (en) | 2004-12-06 | 2009-01-20 | International Business Machines Corporation | Research rapidity and efficiency improvement by analysis of research artifact similarity |
US7703087B1 (en) | 2004-12-10 | 2010-04-20 | Oracle America, Inc. | Reducing layout conflicts among code units with caller-callee relationships |
US20060173877A1 (en) | 2005-01-10 | 2006-08-03 | Piotr Findeisen | Automated alerts for resource retention problems |
DK1688842T3 (da) | 2005-01-26 | 2008-06-16 | Oce Tech Bv | Automatiseret ydelsesanalyse og fejludbedring |
US7747556B2 (en) | 2005-02-28 | 2010-06-29 | Microsoft Corporation | Query-based notification architecture |
US7434206B2 (en) | 2005-03-10 | 2008-10-07 | Hewlett-Packard Development Company, L.P. | Identifying memory leaks in computer systems |
US7739143B1 (en) | 2005-03-24 | 2010-06-15 | Amazon Technologies, Inc. | Robust forecasting techniques with reduced sensitivity to anomalous data |
US7509632B2 (en) | 2005-03-24 | 2009-03-24 | International Business Machines Corporation | Method and apparatus for analyzing call history data derived from execution of a computer program |
EP2998894B1 (en) | 2005-07-11 | 2021-09-08 | Brooks Automation, Inc. | Intelligent condition monitoring and fault diagnostic system |
GB0515405D0 (en) | 2005-07-27 | 2005-08-31 | Ibm | Memory leak detection |
US7702966B2 (en) | 2005-09-07 | 2010-04-20 | Intel Corporation | Method and apparatus for managing software errors in a computer system |
US7765528B2 (en) | 2005-09-21 | 2010-07-27 | Hewlett-Packard Development Company, L.P. | Identifying sources of memory retention |
US7779054B1 (en) | 2005-09-30 | 2010-08-17 | Oracle America, Inc. | Heuristic-based resumption of fully-young garbage collection intervals |
US7735074B2 (en) | 2005-10-17 | 2010-06-08 | Oracle International Corporation | Code outlining without trampolines |
US7926071B2 (en) | 2005-10-20 | 2011-04-12 | Microsoft Corporation | Load balancing interfaces |
US8234378B2 (en) | 2005-10-20 | 2012-07-31 | Microsoft Corporation | Load balancing in a managed execution environment |
US20070168915A1 (en) | 2005-11-15 | 2007-07-19 | Cesura, Inc. | Methods and systems to detect business disruptions, determine potential causes of those business disruptions, or both |
US20070136402A1 (en) | 2005-11-30 | 2007-06-14 | International Business Machines Corporation | Automatic prediction of future out of memory exceptions in a garbage collected virtual machine |
JP2007199811A (ja) | 2006-01-24 | 2007-08-09 | Hitachi Ltd | プログラム制御方法、計算機およびプログラム制御プログラム |
US7590513B2 (en) * | 2006-01-30 | 2009-09-15 | Nec Laboratories America, Inc. | Automated modeling and tracking of transaction flow dynamics for fault detection in complex systems |
US20070220513A1 (en) | 2006-03-15 | 2007-09-20 | International Business Machines Corporation | Automatic detection of hang, bottleneck and deadlock |
US20070234296A1 (en) | 2006-03-31 | 2007-10-04 | Microsoft Corporation | Software variation for robustness through randomized execution contexts |
JP2007286811A (ja) | 2006-04-14 | 2007-11-01 | Konica Minolta Holdings Inc | 情報処理システム |
US20080040674A1 (en) | 2006-08-09 | 2008-02-14 | Puneet K Gupta | Folksonomy-Enhanced Enterprise-Centric Collaboration and Knowledge Management System |
US7475214B2 (en) | 2006-08-16 | 2009-01-06 | International Business Machines Corporation | Method and system to optimize java virtual machine performance |
US8949295B2 (en) | 2006-09-21 | 2015-02-03 | Vmware, Inc. | Cooperative memory resource management via application-level balloon |
US8019632B2 (en) | 2006-10-16 | 2011-09-13 | Accenture Global Services Limited | System and method of integrating enterprise applications |
US20080270945A1 (en) | 2007-04-24 | 2008-10-30 | Fatdoor, Inc. | Interior spaces in a geo-spatial environment |
CN201000563Y (zh) | 2006-11-27 | 2008-01-02 | 哈尔滨工业大学 | 毫秒级实时计算机系统监控装置 |
US7788198B2 (en) | 2006-12-14 | 2010-08-31 | Microsoft Corporation | Method for detecting anomalies in server behavior using operational performance and failure mode monitoring counters |
US20080222074A1 (en) | 2007-02-22 | 2008-09-11 | Peter Lieberwirth | Method or corresponding system employing templates for creating an organizational structure of knowledge |
US9223622B2 (en) | 2007-03-09 | 2015-12-29 | Hewlett-Packard Development Company, L.P. | Capacity planning of multi-tiered applications from application logs |
US20090013245A1 (en) | 2007-04-27 | 2009-01-08 | Bea Systems, Inc. | Enterprise web application constructor xml editor framework |
US8108874B2 (en) | 2007-05-24 | 2012-01-31 | International Business Machines Corporation | Minimizing variations of waiting times of requests for services handled by a processor |
US7793161B2 (en) | 2007-05-29 | 2010-09-07 | International Business Machines Corporation | Method and apparatus to anticipate memory exhaustion in an open services gateway initiative environment |
US7823006B2 (en) | 2007-05-29 | 2010-10-26 | Microsoft Corporation | Analyzing problem signatures |
US8156378B1 (en) | 2010-10-15 | 2012-04-10 | Red Hat, Inc. | System and method for determination of the root cause of an overall failure of a business application service |
CN101339533B (zh) | 2007-07-04 | 2012-10-10 | 国际商业机器公司 | 基于分区的诊断Java系统的内存泄漏的方法及装置 |
US8156492B2 (en) | 2007-09-07 | 2012-04-10 | Oracle International Corporation | System and method to improve memory usage in virtual machines running as hypervisor guests |
US8266190B2 (en) | 2007-09-25 | 2012-09-11 | International Business Machines Corporation | Memory management for garbage collection of critical real time threads |
US7991961B1 (en) | 2007-10-15 | 2011-08-02 | Oracle America, Inc. | Low-overhead run-time memory leak detection and recovery |
US10248483B2 (en) | 2007-10-19 | 2019-04-02 | Oracle International Corporation | Data recovery advisor |
US9354890B1 (en) * | 2007-10-23 | 2016-05-31 | Marvell International Ltd. | Call stack structure for enabling execution of code outside of a subroutine and between call stack frames |
US8214308B2 (en) | 2007-10-23 | 2012-07-03 | Sas Institute Inc. | Computer-implemented systems and methods for updating predictive models |
US7962437B2 (en) | 2007-11-16 | 2011-06-14 | International Business Machines Corporation | Data comparison using different time periods in data sequences |
US20090177692A1 (en) | 2008-01-04 | 2009-07-09 | Byran Christopher Chagoly | Dynamic correlation of service oriented architecture resource relationship and metrics to isolate problem sources |
JP5157537B2 (ja) | 2008-03-06 | 2013-03-06 | 日本電気株式会社 | メモリ管理装置、システム、方法、及び、プログラム |
JP2009217617A (ja) | 2008-03-11 | 2009-09-24 | Hitachi Ltd | メモリリーク箇所の特定方法及び装置 |
US8738652B2 (en) | 2008-03-11 | 2014-05-27 | Paragon Science, Inc. | Systems and methods for dynamic anomaly detection |
US8683483B2 (en) | 2008-03-25 | 2014-03-25 | Oracle America, Inc. | Resource utilization monitor |
CN100570581C (zh) | 2008-04-09 | 2009-12-16 | 中兴通讯股份有限公司 | 故障定位的方法和装置 |
US8224624B2 (en) | 2008-04-25 | 2012-07-17 | Hewlett-Packard Development Company, L.P. | Using application performance signatures for characterizing application updates |
US8990792B2 (en) | 2008-05-26 | 2015-03-24 | Samsung Electronics Co., Ltd. | Method for constructing dynamic call graph of application |
US8457913B2 (en) | 2008-06-04 | 2013-06-04 | Oracle America, Inc. | Computer system with integrated electromagnetic-interference detectors |
US8230269B2 (en) | 2008-06-17 | 2012-07-24 | Microsoft Corporation | Monitoring data categorization and module-based health correlations |
US20090320021A1 (en) | 2008-06-19 | 2009-12-24 | Microsoft Corporation | Diagnosis of application performance problems via analysis of thread dependencies |
US7526682B1 (en) | 2008-06-20 | 2009-04-28 | International Business Machines Corporation | Effective diagnosis of software hangs |
US8566795B2 (en) | 2008-07-15 | 2013-10-22 | International Business Machines Corporation | Selectively obtaining call stack information based on criteria |
CN101661425B (zh) | 2008-08-26 | 2012-03-21 | 国际商业机器公司 | 测试覆盖分析方法和装置 |
JP2010122825A (ja) | 2008-11-18 | 2010-06-03 | Osaka Prefecture Univ | データ予測装置、データ予測方法、データ予測プログラム |
US8856754B2 (en) | 2008-12-15 | 2014-10-07 | Sap Ag | Systems and methods for enhanced profiling of computer applications |
JP5509609B2 (ja) | 2009-02-09 | 2014-06-04 | 日本電気株式会社 | スタックトレース採取システム、方法およびプログラム |
JP5310094B2 (ja) | 2009-02-27 | 2013-10-09 | 日本電気株式会社 | 異常検出システム、異常検出方法および異常検出用プログラム |
US8185781B2 (en) | 2009-04-09 | 2012-05-22 | Nec Laboratories America, Inc. | Invariants-based learning method and system for failure diagnosis in large scale computing systems |
US8375251B2 (en) | 2009-06-11 | 2013-02-12 | Microsoft Corporation | Monitoring and healing a computing system |
US9058421B2 (en) * | 2009-06-16 | 2015-06-16 | Freescale Semiconductor, Inc. | Trace correlation for profiling subroutines |
US9280436B2 (en) | 2009-06-17 | 2016-03-08 | Hewlett Packard Enterprise Development Lp | Modeling a computing entity |
US8099631B2 (en) | 2009-07-17 | 2012-01-17 | Sap Ag | Call-stacks representation for easier analysis of thread dump |
CN101630285A (zh) | 2009-08-07 | 2010-01-20 | 华南理工大学 | 一种应用于嵌入式系统的软件性能测试方法 |
US8103769B1 (en) | 2009-09-03 | 2012-01-24 | Amazon Technologies, Inc. | Dynamic isolation of shared resources |
US20110067007A1 (en) | 2009-09-14 | 2011-03-17 | Red Hat, Inc. | Automatic thread dumping |
JPWO2011046228A1 (ja) | 2009-10-15 | 2013-03-07 | 日本電気株式会社 | システム運用管理装置、システム運用管理方法、及びプログラム記憶媒体 |
US8166269B2 (en) | 2009-11-05 | 2012-04-24 | Oracle America, Inc. | Adaptive triggering of garbage collection |
US20110160927A1 (en) | 2009-12-30 | 2011-06-30 | Wilson Kevin W | Method for Prediction for Nonlinear Seasonal Time Series |
US20110161048A1 (en) | 2009-12-31 | 2011-06-30 | Bmc Software, Inc. | Method to Optimize Prediction of Threshold Violations Using Baselines |
US9003377B2 (en) | 2010-01-07 | 2015-04-07 | Microsoft Technology Licensing, Llc | Efficient resumption of co-routines on a linear stack |
JP5418250B2 (ja) | 2010-01-26 | 2014-02-19 | 富士通株式会社 | 異常検出装置、プログラム、及び異常検出方法 |
US8464255B2 (en) | 2010-03-12 | 2013-06-11 | Microsoft Corporation | Managing performance interference effects on cloud computing servers |
JP2011192097A (ja) | 2010-03-16 | 2011-09-29 | Hitachi Ltd | 異常検知方法およびそれを用いた情報処理システム |
WO2011128922A1 (en) | 2010-04-15 | 2011-10-20 | Neptuny S.R.L. | Automated upgrading method for capacity of it system resources |
US9053234B2 (en) | 2010-04-19 | 2015-06-09 | Apple Inc. | Collapsible stack trace |
US8712950B2 (en) | 2010-04-29 | 2014-04-29 | Microsoft Corporation | Resource capacity monitoring and reporting |
US8522216B2 (en) | 2010-05-04 | 2013-08-27 | Oracle International Corporation | Memory leak detection |
US8839209B2 (en) | 2010-05-12 | 2014-09-16 | Salesforce.Com, Inc. | Software performance profiling in a multi-tenant environment |
US8726240B2 (en) | 2010-05-12 | 2014-05-13 | Salesforce.Com, Inc. | Capturing replayable information at software defect locations in a multi-tenant environment |
US9274842B2 (en) | 2010-06-29 | 2016-03-01 | Microsoft Technology Licensing, Llc | Flexible and safe monitoring of computers |
US9122784B2 (en) | 2010-08-26 | 2015-09-01 | Hewlett-Packard Development Company, L.P. | Isolation of problems in a virtual environment |
US9459942B2 (en) | 2010-08-27 | 2016-10-04 | Hewlett Packard Enterprise Development Lp | Correlation of metrics monitored from a virtual environment |
US8667334B2 (en) | 2010-08-27 | 2014-03-04 | Hewlett-Packard Development Company, L.P. | Problem isolation in a virtual environment |
US8499066B1 (en) | 2010-11-19 | 2013-07-30 | Amazon Technologies, Inc. | Predicting long-term computing resource usage |
US20120159449A1 (en) | 2010-12-15 | 2012-06-21 | International Business Machines Corporation | Call Stack Inspection For A Thread Of Execution |
US8627150B2 (en) | 2011-01-19 | 2014-01-07 | Oracle International Corporation | System and method for using dependency in a dynamic model to relate performance problems in a complex middleware environment |
US8892960B2 (en) | 2011-01-19 | 2014-11-18 | Oracle International Corporation | System and method for determining causes of performance problems within middleware systems |
US8631280B2 (en) | 2011-01-19 | 2014-01-14 | Oracle International Corporation | Method of measuring and diagnosing misbehaviors of software components and resources |
US20120197733A1 (en) | 2011-01-27 | 2012-08-02 | Linkedln Corporation | Skill customization system |
US8818787B2 (en) | 2011-01-31 | 2014-08-26 | Yahoo! Inc. | Method and system for predicting performance of software applications on prospective hardware architecture |
US10558544B2 (en) * | 2011-02-14 | 2020-02-11 | International Business Machines Corporation | Multiple modeling paradigm for predictive analytics |
US8856767B2 (en) * | 2011-04-29 | 2014-10-07 | Yahoo! Inc. | System and method for analyzing dynamic performance of complex applications |
US20120330717A1 (en) | 2011-06-24 | 2012-12-27 | Oracle International Corporation | Retail forecasting using parameter estimation |
US8713378B2 (en) | 2011-07-07 | 2014-04-29 | Microsoft Corporation | Health monitoring of applications in a guest partition |
US9727441B2 (en) | 2011-08-12 | 2017-08-08 | Microsoft Technology Licensing, Llc | Generating dependency graphs for analyzing program behavior |
US9122602B1 (en) | 2011-08-31 | 2015-09-01 | Amazon Technologies, Inc. | Root cause detection service |
US8965889B2 (en) | 2011-09-08 | 2015-02-24 | Oracle International Corporation | Bi-temporal user profiles for information brokering in collaboration systems |
US8990546B2 (en) * | 2011-10-31 | 2015-03-24 | Freescale Semiconductor, Inc. | Data processing system with safe call and return |
US8739172B2 (en) | 2012-01-16 | 2014-05-27 | Hewlett-Packard Development Company, L.P. | Generating a virtual machine placement plan for an identified seasonality of segments of an aggregated resource usage |
US9172608B2 (en) | 2012-02-07 | 2015-10-27 | Cloudera, Inc. | Centralized configuration and monitoring of a distributed computing cluster |
US9104563B2 (en) | 2012-02-09 | 2015-08-11 | Microsoft Technology Licensing, Llc | Self-tuning statistical resource leak detection |
US8984344B2 (en) * | 2012-02-09 | 2015-03-17 | Freescale Semiconductor, Inc. | Stack-based trace message generation for debug and device thereof |
US8943290B2 (en) | 2012-03-27 | 2015-01-27 | Oracle International Corporation | Automatic management of heterogeneous memory resources |
US8892965B2 (en) | 2012-05-11 | 2014-11-18 | Unisys Corporation | Automated trouble ticket generation |
US8719791B1 (en) | 2012-05-31 | 2014-05-06 | Google Inc. | Display of aggregated stack traces in a source code viewer |
US10057726B2 (en) | 2012-10-02 | 2018-08-21 | Razer (Asia-Pacific) Pte. Ltd. | Managing user data on an electronic device |
US8671373B1 (en) * | 2012-11-09 | 2014-03-11 | Jasper Design Automation, Inc. | Analysis of circuit designs via trace signatures |
US9697102B2 (en) | 2012-11-21 | 2017-07-04 | Sap Se | Compare concurrent threads executions |
US8978022B2 (en) | 2013-01-10 | 2015-03-10 | Oracle International Corporation | Reducing instruction miss penalties in applications |
US8997063B2 (en) * | 2013-02-12 | 2015-03-31 | Concurix Corporation | Periodicity optimization in an automated tracing system |
US9292550B2 (en) * | 2013-02-21 | 2016-03-22 | Oracle International Corporation | Feature generation and model selection for generalized linear models |
US9396030B2 (en) | 2013-03-13 | 2016-07-19 | Samsung Electronics Co., Ltd. | Quota-based adaptive resource balancing in a scalable heap allocator for multithreaded applications |
US9015689B2 (en) | 2013-03-14 | 2015-04-21 | Board of Regents on Behalf of Arizona State University | Stack data management for software managed multi-core processors |
US10740358B2 (en) | 2013-04-11 | 2020-08-11 | Oracle International Corporation | Knowledge-intensive data processing system |
CN104182332B (zh) | 2013-05-21 | 2017-09-29 | 华为技术有限公司 | 判断资源泄漏、预测资源使用情况的方法及装置 |
US8977600B2 (en) * | 2013-05-24 | 2015-03-10 | Software AG USA Inc. | System and method for continuous analytics run against a combination of static and real-time data |
US9146862B2 (en) | 2013-07-18 | 2015-09-29 | International Business Machines Corporation | Optimizing memory usage across multiple garbage collected computer environments |
US9176869B2 (en) * | 2013-07-18 | 2015-11-03 | Globalfoundries Inc | Memory use for garbage collected computer environments |
US9442725B2 (en) | 2013-08-21 | 2016-09-13 | Airwatch Llc | Branch trace compression |
US9367428B2 (en) | 2013-10-14 | 2016-06-14 | Nec Corporation | Transparent performance inference of whole software layers and context-sensitive performance debugging |
US9009539B1 (en) | 2014-03-18 | 2015-04-14 | Splunk Inc | Identifying and grouping program run time errors |
US9210181B1 (en) | 2014-05-26 | 2015-12-08 | Solana Networks Inc. | Detection of anomaly in network flow data |
US9459894B2 (en) | 2014-06-17 | 2016-10-04 | International Business Machines Corporation | Active control of memory for java virtual machines and other application runtime environments |
US9454454B2 (en) * | 2014-09-09 | 2016-09-27 | Microsoft Technology Licensing, Llc | Memory leak analysis by usage trends correlation |
US10241901B2 (en) | 2014-10-06 | 2019-03-26 | Oracle International Corporation | Web application performance testing |
GB2546205B (en) * | 2014-10-24 | 2021-07-21 | Google Llc | Methods and systems for automated tagging based on software execution traces |
US9678868B2 (en) * | 2014-10-31 | 2017-06-13 | Xiaomi Inc. | Method and device for optimizing memory |
US9557917B2 (en) * | 2014-11-10 | 2017-01-31 | International Business Machines Corporation | Conditional stack frame allocation |
EP3225010B1 (en) | 2014-11-25 | 2018-09-26 | Ensilo Ltd. | Systems and methods for malicious code detection accuracy assurance |
WO2016153790A1 (en) | 2015-03-23 | 2016-09-29 | Oracle International Corporation | Knowledge-intensive data processing system |
US10248561B2 (en) | 2015-06-18 | 2019-04-02 | Oracle International Corporation | Stateless detection of out-of-memory events in virtual machines |
US9600394B2 (en) | 2015-06-18 | 2017-03-21 | Oracle International Corporation | Stateful detection of anomalous events in virtual machines |
US9720823B2 (en) | 2015-06-18 | 2017-08-01 | Oracle International Corporation | Free memory trending for detecting out-of-memory events in virtual machines |
CN104951379A (zh) | 2015-07-21 | 2015-09-30 | 国家计算机网络与信息安全管理中心 | 一种基于乘积季节模型的软件再生方法 |
CN105023066B (zh) | 2015-07-31 | 2018-07-17 | 山东大学 | 一种基于季节调整的业扩报装分析预测系统及方法 |
US10025650B2 (en) * | 2015-09-17 | 2018-07-17 | International Business Machines Corporation | Determining a trace of a system dump |
US9792259B2 (en) * | 2015-12-17 | 2017-10-17 | Software Ag | Systems and/or methods for interactive exploration of dependencies in streaming data |
US9792200B2 (en) | 2016-03-01 | 2017-10-17 | Sap Se | Assessing vulnerability impact using call graphs |
WO2017196746A1 (en) | 2016-05-09 | 2017-11-16 | Oracle International Corporation | Memory usage determination techniques |
US11327797B2 (en) | 2016-05-09 | 2022-05-10 | Oracle International Corporation | Memory usage determination techniques |
-
2017
- 2017-05-05 US US15/588,526 patent/US11327797B2/en active Active
- 2017-05-05 US US15/588,523 patent/US10467123B2/en active Active
- 2017-05-05 US US15/588,531 patent/US10534643B2/en active Active
- 2017-05-05 US US15/588,521 patent/US10417111B2/en active Active
- 2017-05-08 EP EP17724239.3A patent/EP3455735A1/en not_active Withdrawn
- 2017-05-08 JP JP2018558676A patent/JP6913695B2/ja active Active
- 2017-05-08 JP JP2018558661A patent/JP6952719B2/ja active Active
- 2017-05-08 CN CN201780036490.2A patent/CN109313599B/zh active Active
- 2017-05-08 JP JP2018558656A patent/JP6949878B2/ja active Active
- 2017-05-08 CN CN202210533901.1A patent/CN114896127A/zh active Pending
- 2017-05-08 CN CN201780036496.XA patent/CN109313600B/zh active Active
- 2017-05-08 EP EP17724237.7A patent/EP3455732B1/en active Active
- 2017-05-08 JP JP2018558658A patent/JP6952058B2/ja active Active
- 2017-05-08 EP EP17724238.5A patent/EP3455733A1/en active Pending
- 2017-05-08 CN CN201780036497.4A patent/CN109313602B/zh active Active
- 2017-05-08 EP EP17724692.3A patent/EP3455734A1/en active Pending
- 2017-05-08 CN CN201780036501.7A patent/CN109313601B/zh active Active
-
2019
- 2019-10-30 US US16/669,254 patent/US11093285B2/en active Active
- 2019-12-12 US US16/712,758 patent/US11144352B2/en active Active
-
2021
- 2021-07-02 US US17/366,636 patent/US11614969B2/en active Active
- 2021-09-08 US US17/469,482 patent/US11640320B2/en active Active
- 2021-09-22 JP JP2021154119A patent/JP7331057B2/ja active Active
- 2021-09-28 JP JP2021158071A patent/JP7202432B2/ja active Active
-
2022
- 2022-03-24 US US17/703,862 patent/US20220214918A1/en active Pending
- 2022-12-23 JP JP2022207000A patent/JP7490038B2/ja active Active
-
2023
- 2023-08-09 JP JP2023129817A patent/JP2023162238A/ja active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6751789B1 (en) * | 1997-12-12 | 2004-06-15 | International Business Machines Corporation | Method and system for periodic trace sampling for real-time generation of segments of call stack trees augmented with call stack position determination |
US20100235815A1 (en) * | 2009-03-13 | 2010-09-16 | Microsoft Corporation | Simultaneously displaying multiple call stacks in an interactive debugger |
CN105144112A (zh) * | 2013-04-11 | 2015-12-09 | 甲骨文国际公司 | Java堆使用的季节趋势、预报、异常检测和端点预测 |
CN105556466A (zh) * | 2013-10-30 | 2016-05-04 | 国际商业机器公司 | 代码堆栈管理 |
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109313602A (zh) | 紧急关系中栈段强度的相关性 | |
US11922329B2 (en) | Systems for second-order predictive data analytics, and related methods and apparatus | |
KR102448694B1 (ko) | 예측 데이터 분석을 위한 시스템 및 관련 방법 및 장치 | |
US11481792B2 (en) | Method of training machine learning models for making simulated estimations | |
US10366346B2 (en) | Systems and techniques for determining the predictive value of a feature | |
US9652714B2 (en) | Systems and techniques for predictive data analytics | |
US7636698B2 (en) | Analyzing mining pattern evolutions by comparing labels, algorithms, or data patterns chosen by a reasoning component | |
US20230091610A1 (en) | Systems and methods of generating and validating time-series features using machine learning | |
Camargo et al. | Learning business process simulation models: A Hybrid process mining and deep learning approach | |
US20200342302A1 (en) | Cognitive forecasting | |
US20240202287A1 (en) | Cyclic pattern detection and prediction execution |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |