Akamas Docs
3.1.2
3.1.2
  • How to use this documentation
  • Getting started with Akamas
    • Introduction to Akamas
    • Licensing
    • Deployment
      • Cloud Hosting
    • Security
    • Maintenance & Support (M&S) Services
      • Customer Support Services
      • Support levels for Customer Support Services
      • Support levels for software versions
      • Support levels with Akamas 3.1
  • Installing Akamas
    • Akamas Architecture
    • Prerequisites
      • Hardware Requirements
      • Software Requirements
      • Network requirements
    • Install Akamas dependencies
    • Install the Akamas Server
      • Online installation mode
        • Online installation behind a Proxy server
      • Offline installation mode
      • Changing UI Ports
      • Setup HTTPS configuration
    • Install the Akamas CLI
      • Setup the Akamas CLI
      • Verify the Akamas CLI
      • Initialize Akamas CLI
      • Change CLI configuration
    • Verify the Akamas Server
    • Install the Akamas license
    • Manage anonymous data collection
    • Install an Akamas Workstation
    • Troubleshoot install issues
    • Manage the Akamas Server
      • Akamas logs
      • Audit logs
      • Install upgrades and patches
      • Monitor the Akamas Server
      • Backup & Recover of the Akamas Server
  • Using Akamas
    • General optimization process and methodology
    • Preparing optimization studies
      • Modeling systems
      • Modeling components
        • Creating custom optimization packs
        • Managing optimization packs
      • Creating telemetry instances
      • Creating automation workflows
        • Creating workflows for offline studies
        • Performing load testing to support optimization activities
        • Creating workflows for live optimizations
      • Creating optimization studies
        • Defining optimization goal & constraints
        • Defining windowing policies
        • Defining KPIs
        • Defining parameters & metrics
        • Defining workloads
        • Defining optimization steps
        • Setting safety policies
    • Running optimization studies
      • Before running optimization studies
      • Analyzing results of offline optimization studies
        • Optimization Insights
      • Analyzing results of live optimization studies
      • Before applying optimization results
    • Guidelines for choosing optimization parameters
      • Guidelines for JVM (OpenJ9)
      • Guidelines for JVM layer (OpenJDK)
      • Guidelines for Oracle Database
      • Guidelines for PostgreSQL
    • Guidelines for defining optimization studies
      • Optimizing Linux
      • Optimizing Java OpenJDK
      • Optimizing OpenJ9
      • Optimizing Web Applications
      • Optimizing Kubernetes
      • Optimizing Spark
      • Optimizing Oracle Database
      • Optimizing MongoDB
      • Optimizing MySQL Database
      • Optimizing PostgreSQL
  • Integrating Akamas
    • Integrating Telemetry Providers
      • CSV provider
        • Install CSV provider
        • Create CSV provider instances
      • Dynatrace provider
        • Install Dynatrace provider
        • Create Dynatrace provider instances
      • Prometheus provider
        • Install Prometheus provider
        • Create Prometheus provider instances
        • CloudWatch Exporter
        • OracleDB Exporter
      • Spark History Server provider
        • Install Spark History Server provider
        • Create Spark History Server provider instances
      • NeoLoadWeb provider
        • Setup NeoLoadWeb telemetry provider
        • Create NeoLoadWeb provider instances
      • LoadRunner Professional provider
        • Install LoadRunner Professional provider
        • Create LoadRunner Professional provider instances
      • LoadRunner Enterprise provider
        • Install LoadRunner Enterprise provider
        • Create LoadRunner Enterprise provider instances
      • AWS provider
        • Install AWS provider
        • Create AWS provider instances
    • Integrating Configuration Management
    • Integrating Value Stream Delivery
    • Integrating Load Testing
      • Integrating NeoLoad
      • Integrating Load Runner Professional
      • Integrating LoadRunner Enterprise
  • Akamas Reference
    • Glossary
      • System
      • Component
      • Metric
      • Parameter
      • Component Type
      • Workflow
      • Telemetry Provider
      • Telemetry Instance
      • Optimization Pack
      • Goals & Constraints
      • KPI
      • Optimization Study
      • Offline Optimization Study
      • Live Optimization Study
      • Workspace
    • Construct templates
      • System template
      • Component template
      • Parameter template
      • Metric template
      • Component Types template
      • Telemetry Provider template
      • Telemetry Instance template
      • Workflows template
      • Study template
        • Goal & Constraints
        • Windowing policy
          • Trim windowing
          • Stability windowing
        • Parameter selection
        • Metric selection
        • Workload selection
        • KPIs
        • Steps
          • Baseline step
          • Bootstrap step
          • Preset step
          • Optimize step
        • Parameter rendering
    • Workflow Operators
      • General operator arguments
      • Executor Operator
      • FileConfigurator Operator
      • LinuxConfigurator Operator
      • WindowsExecutor Operator
      • WindowsFileConfigurator Operator
      • Sleep Operator
      • OracleExecutor Operator
      • OracleConfigurator Operator
      • SparkSSHSubmit Operator
      • SparkSubmit Operator
      • SparkLivy Operator
      • NeoLoadWeb Operator
      • LoadRunner Operator
      • LoadRunnerEnteprise Operator
    • Telemetry metric mapping
      • Dynatrace metrics mapping
      • Prometheus metrics mapping
      • NeoLoadWeb metrics mapping
      • Spark History Server metrics mapping
      • LoadRunner metrics mapping
    • Optimization Packs
      • Linux optimization pack
        • Amazon Linux
        • Amazon Linux 2
        • Amazon Linux 2022
        • CentOS 7
        • CentOS 8
        • RHEL 7
        • RHEL 8
        • Ubuntu 16.04
        • Ubuntu 18.04
        • Ubuntu 20.04
      • DotNet optimization pack
        • DotNet Core 3.1
      • Java-OpenJDK optimization pack
        • Java OpenJDK 8
        • Java OpenJDK 11
      • OpenJ9 optimization pack
        • IBM J9 VM 6
        • IBM J9 VM 8
        • Eclipse Open J9 11
      • NodeJS optimization pack
        • NodeJS
      • GO optimization pack
        • GO 1
      • Web Application optimization pack
        • Web Application
      • Docker optimization pack
        • Container
      • Kubernetes optimization pack
        • Kubernetes Pod
        • Kubernetes Container
        • Kubernetes Workload
        • Kubernetes Namespace
        • Kubernetes Cluster
      • WebSphere optimization pack
        • WebSphere 8.5
        • WebSphere Liberty ND
      • AWS optimization pack
        • EC2
        • Lambda
      • PostgreSQL optimization pack
        • PostgreSQL 11
        • PostgreSQL 12
      • Cassandra optimization pack
        • Cassandra
      • MySQL Database optimization pack
        • MySQL 8.0
      • Oracle Database optimization pack
        • Oracle Database 12c
        • Oracle Database 18c
        • Oracle Database 19c
        • RDS Oracle Database 11g
        • RDS Oracle Database 12c
      • MongoDB optimization pack
        • MongoDB 4
        • MongoDB 5
      • Elasticsearch optimization pack
        • Elasticsearch 6
      • Spark optimization pack
        • Spark Application 2.2.0
        • Spark Application 2.3.0
        • Spark Application 2.4.0
    • Command Line commands
      • Administration commands
      • User and Workspace management commands
      • Authentication commands
      • Resource management commands
      • Optimizer options commands
  • Knowledge Base
    • Setting up a Konakart environment for testing Akamas
    • Modeling a sample Java-based e-commerce application (Konakart)
    • Optimizing a web application
    • Optimizing a sample Java OpenJ9 application
    • Optimizing a sample Java OpenJDK application
    • Optimizing a sample Linux system
    • Optimizing a MongoDB server instance
    • Optimizing a Kubernetes application
    • Leveraging Ansible to automate AWS instance management
    • Guidelines for optimizing AWS EC2 instances
    • Optimizing a sample application running on AWS
    • Optimizing a Spark application
    • Optimizing an Oracle Database server instance
    • Optimizing an Oracle Database for an e-commerce service
    • Guidelines for optimizing Oracle RDS
    • Optimizing a MySQL server database running Sysbench
    • Optimizing a MySQL server database running OLTPBench
    • Optimizing a live K8s deployment
    • Optimizing a live full-stack deployment (K8s + JVM)
  • Akamas Free Trial
Powered by GitBook
On this page

Was this helpful?

Export as PDF
  1. Knowledge Base

Optimizing a live full-stack deployment (K8s + JVM)

Last updated 2 years ago

Was this helpful?

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 .

name: Optimize Kubernetes Container + JVM
system: My Deployment + JVM
workflow: workflow

goal:
  objective: minimize
  function:
    formula: cost_csv.cost
  constraints:
    absolute:
      - name: adservice-response-time-slo
        formula: adservice_istio.istio_incoming_response_time_90_ms <= 10
      - name: adservice-restart-slo
        formula: adservice_pod.k8s_pod_container_restarts:max == 0
      - name: adservice-failures-slo
        formula: adservice_istio.istio_incoming_failed_transactions / adservice_istio.istio_incoming_success_transactions <= 0.1

workloadsSelection:
  - name: adservice_istio.istio_incoming_service_throughput

optimizerOptions:
  onlineMode: RECOMMEND
  experimentsWithBeta: 0
  safetyFactor: 0.6
  explorationFactor: 0.1
  optimizerEngineVersion: 1.5.3rc5


windowing:
  type: trim
  trim: [1m, 0s]
  task: Test

parametersSelection:
  - name: adservice_jvm.jvm_inlineSmallCode
  - name: adservice_jvm.jvm_maxInlineSize
    domain: [1, 500]
  - name: adservice_jvm.jvm_maxHeapFreeRatio
  - name: adservice_jvm.jvm_minHeapFreeRatio
  - name: adservice_jvm.jvm_gcType
  - name: adservice_jvm.jvm_parallelGCThreads
    domain: [1, 2]
  - name: adservice_jvm.jvm_concurrentGCThreads
    domain: [1, 2]
  - name: adservice_jvm.jvm_maxTenuringThreshold
  - name: adservice_jvm.jvm_compilationThreads
    domain: [2, 4]
  - name: adservice_jvm.jvm_newSize
    domain: [16, 300]
  - name: adservice_jvm.jvm_survivorRatio
  - name: adservice_jvm.jvm_minHeapSize
    domain: [16, 300]
  - name: adservice_jvm.jvm_maxHeapSize
    domain: [16, 300]
  - name: adservice_jvm.jvm_alwaysPreTouch
  - name: adservice_jvm.jvm_useTransparentHugePages
  - name: adservice.cpu_request
    domain: [10, 300]
  - name: adservice.memory_request
    domain: [64, 512]

parameterConstraints:
  - name: concGC_below_parGC
    formula: adservice_jvm.jvm_concurrentGCThreads <= adservice_jvm.jvm_parallelGCThreads
  - name: newSize_10Of_maxHeap
    formula: adservice_jvm.jvm_newSize >= 0.1 * adservice_jvm.jvm_maxHeapSize
  - name: newSize_90Of_maxHeap
    formula: adservice_jvm.jvm_newSize <= 0.9 * adservice_jvm.jvm_maxHeapSize
  - name: minHeap_10Of_maxHeap
    formula: adservice_jvm.jvm_minHeapSize >= 0.1 * adservice_jvm.jvm_maxHeapSize
  - name: minHeap_below_maxHeap
    formula: adservice_jvm.jvm_minHeapSize <= adservice_jvm.jvm_maxHeapSize

steps:
  - name: baseline
    type: baseline
    numberOfTrials: 14
    values:
      adservice.cpu_request: 300
      adservice.memory_request: 200
      adservice_jvm.jvm_gcType: "Parallel"

  - name: in_domain_baseline
    type: preset
    numberOfTrials: 14
    values:
      adservice.cpu_request: 300
      adservice.memory_request: 200
      adservice_jvm.jvm_gcType: "Parallel"
      adservice_jvm.jvm_maxHeapSize: 96
      adservice_jvm.jvm_minHeapSize: 16
      adservice_jvm.jvm_inlineSmallCode: 2048
      adservice_jvm.jvm_maxInlineSize: 35
      adservice_jvm.jvm_maxHeapFreeRatio: 100
      adservice_jvm.jvm_minHeapFreeRatio: 1
      adservice_jvm.jvm_parallelGCThreads: 1
      adservice_jvm.jvm_concurrentGCThreads: 1
      adservice_jvm.jvm_maxTenuringThreshold: 15
      adservice_jvm.jvm_compilationThreads: 2
      adservice_jvm.jvm_newSize: 16
      adservice_jvm.jvm_survivorRatio: 8
      adservice_jvm.jvm_alwaysPreTouch: '-AlwaysPreTouch'
      adservice_jvm.jvm_useTransparentHugePages: '-UseTransparentHugePages'

  - name: optimize
    type: optimize
    numberOfTrials: 14
    numberOfExperiments: 5
    numberOfInitExperiments: 0
    maxFailedExperiments: 1000

  - name: serial_GC_pretouch_thp
    type: preset
    numberOfTrials: 14
    values:
      adservice.cpu_request: 300
      adservice.memory_request: 200
      adservice_jvm.jvm_maxHeapSize: 96
      adservice_jvm.jvm_minHeapSize: 16
      adservice_jvm.jvm_inlineSmallCode: 2048
      adservice_jvm.jvm_maxInlineSize: 35
      adservice_jvm.jvm_maxHeapFreeRatio: 100
      adservice_jvm.jvm_minHeapFreeRatio: 1
      adservice_jvm.jvm_parallelGCThreads: 1
      adservice_jvm.jvm_concurrentGCThreads: 1
      adservice_jvm.jvm_maxTenuringThreshold: 15
      adservice_jvm.jvm_compilationThreads: 2
      adservice_jvm.jvm_newSize: 16
      adservice_jvm.jvm_survivorRatio: 8
      adservice_jvm.jvm_gcType: "Serial"
      adservice_jvm.jvm_alwaysPreTouch: '+AlwaysPreTouch'
      adservice_jvm.jvm_useTransparentHugePages: '+UseTransparentHugePages'

  - name: optimize2
    type: optimize
    numberOfTrials: 14
    numberOfExperiments: 5
    numberOfInitExperiments: 0
    maxFailedExperiments: 1000

  - name: ConcMarkSweep_GC
    type: preset
    numberOfTrials: 14
    values:
      adservice.cpu_request: 300
      adservice.memory_request: 200
      adservice_jvm.jvm_maxHeapSize: 96
      adservice_jvm.jvm_minHeapSize: 16
      adservice_jvm.jvm_inlineSmallCode: 2048
      adservice_jvm.jvm_maxInlineSize: 35
      adservice_jvm.jvm_maxHeapFreeRatio: 100
      adservice_jvm.jvm_minHeapFreeRatio: 1
      adservice_jvm.jvm_parallelGCThreads: 1
      adservice_jvm.jvm_concurrentGCThreads: 1
      adservice_jvm.jvm_maxTenuringThreshold: 15
      adservice_jvm.jvm_compilationThreads: 2
      adservice_jvm.jvm_newSize: 16
      adservice_jvm.jvm_survivorRatio: 8
      adservice_jvm.jvm_gcType: "ConcMarkSweep"
      adservice_jvm.jvm_alwaysPreTouch: '+AlwaysPreTouch'
      adservice_jvm.jvm_useTransparentHugePages: '+UseTransparentHugePages'

  - name: optimize3
    type: optimize
    numberOfTrials: 14
    numberOfExperiments: 5
    numberOfInitExperiments: 0
    maxFailedExperiments: 1000

  - name: G1_GC
    type: preset
    numberOfTrials: 14
    values:
      adservice.cpu_request: 300
      adservice.memory_request: 200
      adservice_jvm.jvm_maxHeapSize: 96
      adservice_jvm.jvm_minHeapSize: 16
      adservice_jvm.jvm_inlineSmallCode: 2048
      adservice_jvm.jvm_maxInlineSize: 35
      adservice_jvm.jvm_maxHeapFreeRatio: 100
      adservice_jvm.jvm_minHeapFreeRatio: 1
      adservice_jvm.jvm_parallelGCThreads: 1
      adservice_jvm.jvm_concurrentGCThreads: 1
      adservice_jvm.jvm_maxTenuringThreshold: 15
      adservice_jvm.jvm_compilationThreads: 2
      adservice_jvm.jvm_newSize: 16
      adservice_jvm.jvm_survivorRatio: 8
      adservice_jvm.jvm_gcType: "G1"
      adservice_jvm.jvm_alwaysPreTouch: '+AlwaysPreTouch'
      adservice_jvm.jvm_useTransparentHugePages: '+UseTransparentHugePages'

  - name: optimize4
    type: optimize
    numberOfTrials: 14
    numberOfExperiments: 5
    numberOfInitExperiments: 0
    maxFailedExperiments: 1000

  - name: ParNew_GC
    type: preset
    numberOfTrials: 14
    values:
      adservice.cpu_request: 300
      adservice.memory_request: 200
      adservice_jvm.jvm_maxHeapSize: 96
      adservice_jvm.jvm_minHeapSize: 16
      adservice_jvm.jvm_inlineSmallCode: 2048
      adservice_jvm.jvm_maxInlineSize: 35
      adservice_jvm.jvm_maxHeapFreeRatio: 100
      adservice_jvm.jvm_minHeapFreeRatio: 1
      adservice_jvm.jvm_parallelGCThreads: 1
      adservice_jvm.jvm_concurrentGCThreads: 1
      adservice_jvm.jvm_maxTenuringThreshold: 15
      adservice_jvm.jvm_compilationThreads: 2
      adservice_jvm.jvm_newSize: 16
      adservice_jvm.jvm_survivorRatio: 8
      adservice_jvm.jvm_gcType: "ParNew"
      adservice_jvm.jvm_alwaysPreTouch: '+AlwaysPreTouch'
      adservice_jvm.jvm_useTransparentHugePages: '+UseTransparentHugePages'

  - name: optimize5
    type: optimize
    numberOfTrials: 14
    numberOfExperiments: 1000
    numberOfInitExperiments: 0
    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 page of the reference guide.

Optimizing a live K8s deployment
Optimize step