#!/bin/sh

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#
# SPDX-License-Identifier: Apache-2.0

# This file is a simple shim that configures some basic profiling for
# traffic_server in jemalloc. If you use it, you'll want to adjust the values
# in MALLOC_CONF to meet your specific needs. (man jemalloc for details.)

# To use this, set your traffic server binary parameter to be this file instead
# of traffic_server.

prefix=/usr
exec_prefix=/usr
libdir=/usr/lib64

MALLOC_CONF="prof:true,prof_prefix:/tmp/jeprof.out,lg_prof_interval:33,lg_prof_sample:20"
LD_PRELOAD=${libdir}/libjemalloc.so.2
export LD_PRELOAD
export MALLOC_CONF
/opt/trafficserver/bin/traffic_server $@
