Optimizing a live full-stack deployment (K8s + JVM)
The following study shows how to optimize the cost of a Kubernetes deployment considering also some JMV parameters in the optimization. Notice that, except for the JVM portion, the study is the same as the study in the example Optimizing a live K8s deployment.
1
name: Optimize Kubernetes Container + JVM
2
system: My Deployment + JVM
3
workflow: workflow
4
5
goal:
6
objective: minimize
7
function:
8
formula: cost_csv.cost
9
constraints:
10
absolute:
11
- name: adservice-response-time-slo
12
formula: adservice_istio.istio_incoming_response_time_90_ms <= 10
13
- name: adservice-restart-slo
14
formula: adservice_pod.k8s_pod_container_restarts:max == 0
15
- name: adservice-failures-slo
16
formula: adservice_istio.istio_incoming_failed_transactions / adservice_istio.istio_incoming_success_transactions <= 0.1
17
18
workloadsSelection:
19
- name: adservice_istio.istio_incoming_service_throughput
20
21
optimizerOptions:
22
onlineMode: RECOMMEND
23
experimentsWithBeta: 0
24
safetyFactor: 0.6
25
explorationFactor: 0.1
26
optimizerEngineVersion: 1.5.3rc5
27
28
29
windowing:
30
type: trim
31
trim: [1m, 0s]
32
task: Test
33
34
parametersSelection:
35
- name: adservice_jvm.jvm_inlineSmallCode
36
- name: adservice_jvm.jvm_maxInlineSize
37
domain: [1, 500]
38
- name: adservice_jvm.jvm_maxHeapFreeRatio
39
- name: adservice_jvm.jvm_minHeapFreeRatio
40
- name: adservice_jvm.jvm_gcType
41
- name: adservice_jvm.jvm_parallelGCThreads
42
domain: [1, 2]
43
- name: adservice_jvm.jvm_concurrentGCThreads
44
domain: [1, 2]
45
- name: adservice_jvm.jvm_maxTenuringThreshold
46
- name: adservice_jvm.jvm_compilationThreads
47
domain: [2, 4]
48
- name: adservice_jvm.jvm_newSize
49
domain: [16, 300]
50
- name: adservice_jvm.jvm_survivorRatio
51
- name: adservice_jvm.jvm_minHeapSize
52
domain: [16, 300]
53
- name: adservice_jvm.jvm_maxHeapSize
54
domain: [16, 300]
55
- name: adservice_jvm.jvm_alwaysPreTouch
56
- name: adservice_jvm.jvm_useTransparentHugePages
57
- name: adservice.cpu_request
58
domain: [10, 300]
59
- name: adservice.memory_request
60
domain: [64, 512]
61
62
parameterConstraints:
63
- name: concGC_below_parGC
64
formula: adservice_jvm.jvm_concurrentGCThreads <= adservice_jvm.jvm_parallelGCThreads
65
- name: newSize_10Of_maxHeap
66
formula: adservice_jvm.jvm_newSize >= 0.1 * adservice_jvm.jvm_maxHeapSize
67
- name: newSize_90Of_maxHeap
68
formula: adservice_jvm.jvm_newSize <= 0.9 * adservice_jvm.jvm_maxHeapSize
69
- name: minHeap_10Of_maxHeap
70
formula: adservice_jvm.jvm_minHeapSize >= 0.1 * adservice_jvm.jvm_maxHeapSize
71
- name: minHeap_below_maxHeap
72
formula: adservice_jvm.jvm_minHeapSize <= adservice_jvm.jvm_maxHeapSize
73
74
steps:
75
- name: baseline
76
type: baseline
77
numberOfTrials: 14
78
values:
79
adservice.cpu_request: 300
80
adservice.memory_request: 200
81
adservice_jvm.jvm_gcType: "Parallel"
82
83
- name: in_domain_baseline
84
type: preset
85
numberOfTrials: 14
86
values:
87
adservice.cpu_request: 300
88
adservice.memory_request: 200
89
adservice_jvm.jvm_gcType: "Parallel"
90
adservice_jvm.jvm_maxHeapSize: 96
91
adservice_jvm.jvm_minHeapSize: 16
92
adservice_jvm.jvm_inlineSmallCode: 2048
93
adservice_jvm.jvm_maxInlineSize: 35
94
adservice_jvm.jvm_maxHeapFreeRatio: 100
95
adservice_jvm.jvm_minHeapFreeRatio: 1
96
adservice_jvm.jvm_parallelGCThreads: 1
97
adservice_jvm.jvm_concurrentGCThreads: 1
98
adservice_jvm.jvm_maxTenuringThreshold: 15
99
adservice_jvm.jvm_compilationThreads: 2
100
adservice_jvm.jvm_newSize: 16
101
adservice_jvm.jvm_survivorRatio: 8
102
adservice_jvm.jvm_alwaysPreTouch: '-AlwaysPreTouch'
103
adservice_jvm.jvm_useTransparentHugePages: '-UseTransparentHugePages'
104
105
- name: optimize
106
type: optimize
107
numberOfTrials: 14
108
numberOfExperiments: 5
109
numberOfInitExperiments: 0
110
maxFailedExperiments: 1000
111
112
- name: serial_GC_pretouch_thp
113
type: preset
114
numberOfTrials: 14
115
values:
116
adservice.cpu_request: 300
117
adservice.memory_request: 200
118
adservice_jvm.jvm_maxHeapSize: 96
119
adservice_jvm.jvm_minHeapSize: 16
120
adservice_jvm.jvm_inlineSmallCode: 2048
121
adservice_jvm.jvm_maxInlineSize: 35
122
adservice_jvm.jvm_maxHeapFreeRatio: 100
123
adservice_jvm.jvm_minHeapFreeRatio: 1
124
adservice_jvm.jvm_parallelGCThreads: 1
125
adservice_jvm.jvm_concurrentGCThreads: 1
126
adservice_jvm.jvm_maxTenuringThreshold: 15
127
adservice_jvm.jvm_compilationThreads: 2
128
adservice_jvm.jvm_newSize: 16
129
adservice_jvm.jvm_survivorRatio: 8
130
adservice_jvm.jvm_gcType: "Serial"
131
adservice_jvm.jvm_alwaysPreTouch: '+AlwaysPreTouch'
132
adservice_jvm.jvm_useTransparentHugePages: '+UseTransparentHugePages'
133
134
- name: optimize2
135
type: optimize
136
numberOfTrials: 14
137
numberOfExperiments: 5
138
numberOfInitExperiments: 0
139
maxFailedExperiments: 1000
140
141
- name: ConcMarkSweep_GC
142
type: preset
143
numberOfTrials: 14
144
values:
145
adservice.cpu_request: 300
146
adservice.memory_request: 200
147
adservice_jvm.jvm_maxHeapSize: 96
148
adservice_jvm.jvm_minHeapSize: 16
149
adservice_jvm.jvm_inlineSmallCode: 2048
150
adservice_jvm.jvm_maxInlineSize: 35
151
adservice_jvm.jvm_maxHeapFreeRatio: 100
152
adservice_jvm.jvm_minHeapFreeRatio: 1
153
adservice_jvm.jvm_parallelGCThreads: 1
154
adservice_jvm.jvm_concurrentGCThreads: 1
155
adservice_jvm.jvm_maxTenuringThreshold: 15
156
adservice_jvm.jvm_compilationThreads: 2
157
adservice_jvm.jvm_newSize: 16
158
adservice_jvm.jvm_survivorRatio: 8
159
adservice_jvm.jvm_gcType: "ConcMarkSweep"
160
adservice_jvm.jvm_alwaysPreTouch: '+AlwaysPreTouch'
161
adservice_jvm.jvm_useTransparentHugePages: '+UseTransparentHugePages'
162
163
- name: optimize3
164
type: optimize
165
numberOfTrials: 14
166
numberOfExperiments: 5
167
numberOfInitExperiments: 0
168
maxFailedExperiments: 1000
169
170
- name: G1_GC
171
type: preset
172
numberOfTrials: 14
173
values:
174
adservice.cpu_request: 300
175
adservice.memory_request: 200
176
adservice_jvm.jvm_maxHeapSize: 96
177
adservice_jvm.jvm_minHeapSize: 16
178
adservice_jvm.jvm_inlineSmallCode: 2048
179
adservice_jvm.jvm_maxInlineSize: 35
180
adservice_jvm.jvm_maxHeapFreeRatio: 100
181
adservice_jvm.jvm_minHeapFreeRatio: 1
182
adservice_jvm.jvm_parallelGCThreads: 1
183
adservice_jvm.jvm_concurrentGCThreads: 1
184
adservice_jvm.jvm_maxTenuringThreshold: 15
185
adservice_jvm.jvm_compilationThreads: 2
186
adservice_jvm.jvm_newSize: 16
187
adservice_jvm.jvm_survivorRatio: 8
188
adservice_jvm.jvm_gcType: "G1"
189
adservice_jvm.jvm_alwaysPreTouch: '+AlwaysPreTouch'
190
adservice_jvm.jvm_useTransparentHugePages: '+UseTransparentHugePages'
191
192
- name: optimize4
193
type: optimize
194
numberOfTrials: 14
195
numberOfExperiments: 5
196
numberOfInitExperiments: 0
197
maxFailedExperiments: 1000
198
199
- name: ParNew_GC
200
type: preset
201
numberOfTrials: 14
202
values:
203
adservice.cpu_request: 300
204
adservice.memory_request: 200
205
adservice_jvm.jvm_maxHeapSize: 96
206
adservice_jvm.jvm_minHeapSize: 16
207
adservice_jvm.jvm_inlineSmallCode: 2048
208
adservice_jvm.jvm_maxInlineSize: 35
209
adservice_jvm.jvm_maxHeapFreeRatio: 100
210
adservice_jvm.jvm_minHeapFreeRatio: 1
211
adservice_jvm.jvm_parallelGCThreads: 1
212
adservice_jvm.jvm_concurrentGCThreads: 1
213
adservice_jvm.jvm_maxTenuringThreshold: 15
214
adservice_jvm.jvm_compilationThreads: 2
215
adservice_jvm.jvm_newSize: 16
216
adservice_jvm.jvm_survivorRatio: 8
217
adservice_jvm.jvm_gcType: "ParNew"
218
adservice_jvm.jvm_alwaysPreTouch: '+AlwaysPreTouch'
219
adservice_jvm.jvm_useTransparentHugePages: '+UseTransparentHugePages'
220
221
- name: optimize5
222
type: optimize
223
numberOfTrials: 14
224
numberOfExperiments: 1000
225
numberOfInitExperiments: 0
226
maxFailedExperiments: 1000
Note that in this study a present step has been specified with the specific value (category) of categorical parameters, as otherwise, the optimizer would only consider a category that has already been seen in the configurations history. For more details, please refer to the Optimize step page of the reference guide.