Cheatsheet

2m read

Zsh

Checking Directories Size

du -sh * | sort -h      # human-readable, sorted
du -h * | sort -rh | head -5    # human-readable, sorted, top 5

Identifying Processes Using Ports

lsof -i tcp:4000 

COMMAND     PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
com.docker 30895 dmitry   27u  IPv6 0x76138f66872a1fdd      0t0  TCP *:terabase (LISTEN)

Scan open ports on a remote machine

sudo nmap -sT -p-  <ip_address>

asdf

Use .default-npm-packages file to install packages globally

Updating a single package in all versions

asdf list nodejs | xargs -I@ env ASDF_NODEJS_VERSION="@" npm install -g $pkg

Updating all packages in all versions

asdf list nodejs | xargs -I@ env ASDF_NODEJS_VERSION="@" npm upgrade -g

Will also can easily parallelize it with the -P xargs option

asdf list nodejs | xargs -I@ -P4 env ASDF_NODEJS_VERSION="@" npm upgrade -g

Kafka

Send kafka messages to the topic

kafka-console-producer --broker-list localhost:9092 --topic {topic}
>send
>wow

Consume events from the given topic

kafka-console-consumer --bootstrap-server localhost:9092 --topic {topic} --from-beginning

send
wow
^CProcessed a total of 2 messages

Create kafka topics (log compact)

kafka-topics --create \
--bootstrap-server localhost:9092 \
--topic {topic} \
--partitions 8 \
--replication-factor 1 \
--config cleanup.policy=compact \
--config retention.ms=10000 \
--config segment.bytes=100
Created topic {topic}.

Ruby

Profiling tools

gem 'memory_profiler'
gem 'flamegraph'
gem 'rack-mini-profiler'
gem 'stackprof'

Benchmarking code

Benchmark.measure { 1000.times {  } } && 1

Generating flamegraph report

Flamegraph.generate('graph.html') do
  @user = User.take_random
end

Creating inline active record model

class User < ActiveRecord::Base; end

NewRelic

Looking for problematic endpoints

SELECT COUNT(*),
   percentile(duration, 50),
   percentile(duration, 95),
   percentile(duration, 99),
   max(duration),
   percentile(externalDuration, 50),
   percentile(externalDuration, 95),
   percentile(externalDuration, 99),
   max(externalDuration),
   percentile(databaseDuration, 50),
   percentile(databaseDuration, 95),
   percentile(databaseDuration, 99),
   max(databaseDuration)
FROM Transaction FACET name
WHERE appName = '{app}' AND transactionType = 'Web' SINCE 24 hours ago LIMIT MAX

Inspecting action

SELECT *
FROM Transaction
WHERE appName = '{app}'
  AND transactionType = 'Web'
  AND name = '{controller}'
  AND duration > 1000 SINCE 24 hours ago LIMIT MAX

Kubernetes (k8s)

Get all resources in the given context

# resources: deployment,pods,services,configmaps,secrets,ingress
kubectl --context {context} get pods

Delete resources found by a given search

# -l app=app-name to filter using k8s labels
# | grep something to filter using grep if there are no labels
# | xargs kubectl cmd to run a kubectl command on the results

kubectl get configmap,secrets,deployments,service,ingress -o jsonpath="{range .items[*]}{.kind}/{.metadata.name}{'\n'}{end}" | grep something | xargs kubectl delete

Watch logs from multiple pods simultaneously - https://github.com/stern/stern

stern deployment/name