JProfiler with Docker Sonatype Nexus3

使用 JProfiler 监控 Docker Sonatype Nexus3 下载 JProfiler 从 https://www.ej-technologies.com/下载 JProfiler 和 Agent(注意版本必须一致) JProfiler GUI https://download-gcdn.ej-technologies.com/jprofiler/jprofiler_macos_12_0_2.dmg JProfiler Agent https://download-gcdn.ej-technologies.com/jprofiler/jprofiler_linux_12_0_2.sh 在服务器上安装 JProfiler Agent 将下载后的 jprofiler_linux_12_0_2.sh 传到服务器上,通过 sh jprofiler_linux_12_0_2.sh 命令按提示安装即可 默认安装路径为 /opt/jprofiler12/,这个路径在启动 Docker 的时候要映射到容器内部 启动 Docker Sonatype Nexus3 在官方 sonatype/nexus3 容器启动参数的基础上做如下修改 使用 -v /opt/jprofiler12:/opt/jprofiler12 将 jprofiler 路径映射到容器内部 增加 -agentpath:/opt/jprofiler12/bin/linux-x64/libjprofilerti.so=port=9899 JVM 参数,设置监听端口为 9899 增加 -p 9899:9899 容器端口映射 docker run -d \ -e NEXUS_CONTEXT=nexus \ -e INSTALL4J_ADD_VM_PARAMS="-Xms10g -Xmx10g \ -agentpath:/opt/jprofiler12/bin/linux-x64/libjprofilerti.so=port=9899 \ -XX:MaxDirectMemorySize=15530M \ -XX:ActiveProcessorCount=16 \ -XX:+UseParNewGC \ -XX:ParallelGCThreads=12 \ -XX:MaxTenuringThreshold=6 \ -XX:SurvivorRatio=5 \ -XX:+UseConcMarkSweepGC \ -XX:-CMSParallelRemarkEnabled \ -XX:CMSInitiatingOccupancyFraction=65 \ -XX:+UseCMSInitiatingOccupancyOnly \ -XX:+UseCMSCompactAtFullCollection \ -XX:+CMSClassUnloadingEnabled \ -XX:+DisableExplicitGC \ -XX:+PrintGCDetails \ -Xloggc:/nexus-data/vgc/nexus-$(date +%s).

Read more

Securing Docker ports with firewalld

概述 为了保护 Docker 暴露的端口不受外部访问的影响,可以使用 firewalld 配置防火墙规则,只允许特定的 IP 访问。 通过让 firewalld 创建 DOCKER-USER 链,我们可以实现由 firewalld 维护的安全 Docker 端口, Docker 处理 iptables 规则以提供网络隔离,更多详细 本文基于环境 Docker-CE 19.03.12 CentOS Linux release 7.8.2003 Firewall 0.6.3 本文例子: 我们使用 Docker 安装一个 Nginx,并将 80(HTTP) 端口对外映射为 8080,443(HTTPS) 端口对外映射为 8443,并通过 Firewalld 仅允许特定的 IP 访问;提示:后续的防火墙规则中配置的端口是容器内部端口,例如 80,443 192.168.51.246 安装 Nginx Docker 配置 192.168.51.245 可以访问 Nginx Docker 其他机器无法访问 Nginx Docker 重要的事情说三遍 如果你在 Docker 运行时重启 firewalld,那么 firewalld 将删除 DOCKER-USER 不要在 Docker 运行时重启 firewalld 不要在 Docker 运行时重启 firewalld

Read more

Use Maven plugin to export license info in source files and its optional dependencies

有的时候我们那需要分析多模块 Maven 项目的依赖使用情况,并希望能够分析出这些依赖的 LICENSE 信息。使用 io.github.coolbeevip:license-maven-plugin 插件 可以生成 TXT 或者 CSV 格式的分析报告 youtube bilibili CSV 格式的报告 NOTICE.CSV NOTICE-LICENSE.CSV TXT 格式的报告 NOTICE.TXT NOTICE-LICENSE.TXT 插件 LICENSE-MAVEN-PLUGIN format 导出格式,支持 csv、txt; license 是否分析 LICENSE 信息,默认 false; ignoreGroupIds 忽略 groupId 列表, 多个用逗号分割; timeout 分析 LICENSE 的超时时间,默认 5 秒; 导出报告 在 Maven 项目的根目录执行如下命令 导出 CSV mvn io.github.coolbeevip:license-maven-plugin:1.5.0:dependency-license-export -Dformat=csv 导出 TXT mvn io.github.coolbeevip:license-maven-plugin:1.5.0:dependency-license-export -Dformat=txt 提示: 导出的报告位置在 ./target/distribute 目录下 导出报告(忽略部分依赖) mvn io.github.coolbeevip:license-maven-plugin:1.5.0:dependency-license-export -Dformat=csv -DignoreGroupIds=org.apache.servicecomb,com.github.seanyinx 导出报告(分析LICENSE) 此功能使用 selenium 从 Maven Central Repository 分析依赖的 License 信息

Read more

Synchronize between image repositories with Bash

从源镜像仓库批量拉取镜像,并将这些镜像推送到目标镜像仓库的批量脚本 #!/bin/bash ################################################# # 使用方式 # 从源仓库拉取镜像到本机 # sh docker-images-pulling-pushing.sh pull # # 将本机镜像推送到目的仓库 # sh docker-images-pulling-pushing.sh push # # 清理本机的镜像 # sh docker-images-pulling-pushing.sh clean ################################################# # 源仓库地址 DOCKER_REPO_FROM= # 目标仓库地址 DOCKER_REPO_TO=192.168.2.2:8888/ DOCKER_REPO_TO_USER=test DOCKER_REPO_TO_PASS=Test123456 # 镜像定义 DOCKER_IMAGES=() DOCKER_IMAGES+=(postgres:9.6) DOCKER_IMAGES+=(elasticsearch:6.6.2) DOCKER_IMAGES+=(coolbeevip/servicecomb-pack) # 从源仓库地址拉取镜像到本机仓库 function pull(){ echo "Pull images from $DOCKER_REPO_FROM" for image in ${DOCKER_IMAGES[@]}; do docker pull $DOCKER_REPO_FROM$image done } # 本机镜像推送到目的仓库 function push(){ docker login http://$DOCKER_REPO_TO -u $DOCKER_REPO_TO_USER -p $DOCKER_REPO_TO_PASS echo "Push $DOCKER_REPO_FROM to $DOCKER_REPO_TO" for image in ${DOCKER_IMAGES[@]}; do docker image tag $DOCKER_REPO_FROM$image $DOCKER_REPO_TO$image docker push $DOCKER_REPO_TO$image done } # 清理本机拉取后的镜像 function clean(){ echo "Remove images" docker rmi -f $(docker images | grep $DOCKER_REPO_FROM | awk '{print $3}') docker rmi -f $(docker images | grep $DOCKER_REPO_TO | awk '{print $3}') } case "${@: -1}" in pull ) pull ;; clean ) clean ;; push ) push ;; esac

MacOS Switch JDK

查看本机 JDK 版本 命令行输入 /usr/libexec/java_home -V 可以看到多个 JDK 版本 $ /usr/libexec/java_home -V Matching Java Virtual Machines (2): 11.0.10, x86_64: "OpenJDK 11.0.10" /Users/zhanglei/Library/Java/JavaVirtualMachines/adopt-openj9-11.0.10/Contents/Home 1.8.0_201, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home /Users/zhanglei/Library/Java/JavaVirtualMachines/adopt-openj9-11.0.10/Contents/Home 查看当前使用的 JDK 版本 $ java -version java version "1.8.0_201" Java(TM) SE Runtime Environment (build 1.8.0_201-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode) 切换 JDK 切换到 JDK 11.0.10 版本,并查看切换后的 JDK 版本 $ export JAVA_HOME=`/usr/libexec/java_home -v 11.0.10` $ java -version openjdk version "11.

Read more

Oracle Proxy Using HAProxy Docker

下载 HAProxy Docker docker pull haproxy:2.3 创建工作目录 mkdir -p /opt/haproxy-oracle/docker_volume 在 /opt/haproxy-oracle/docker_volume 目录下创建如下 haproxy.cfg 文件,请将文件尾部的 oracle 地址和端口改为你的地址和端口 global daemon log 127.0.0.1 local0 log 127.0.0.1 local1 notice maxconn 4096 tune.ssl.default-dh-param 2048 defaults log global retries 3 maxconn 2000 timeout connect 5s timeout client 50s timeout server 50s listen stats bind *:9090 balance mode http stats enable stats auth admin:admin stats uri /stats listen oracle-proxy log global bind :1521 mode tcp balance roundrobin server oracle-1 10.

Read more

Setting up Redis for Production

安装 官方建议的安装方法是从源代码编译安装,您可以从 redis.io 下载最新稳定版的 TAR 包 wget https://download.redis.io/releases/redis-6.2.5.tar.gz tar xvzf redis-6.2.5.tar.gz cd redis-6.2.5 make 此时,您可以通过键入 make test 来测试您的构建是否正常工作。编译后 redis-6.2.5/src 目录填充了一部分可执行文件。 最好将编译后的 Redis 执行文件都复制到适当的位置,或者使用以下命令手动复制(假设我们的安装路径是 /usr/local/redis): # 可执行文件 sudo mkdir -p /usr/local/redis/bin sudo cp src/redis-server /usr/local/redis/bin sudo cp src/redis-cli /usr/local/redis/bin sudo cp src/redis-sentinel /usr/local/redis/bin sudo cp src/redis-benchmark /usr/local/redis/bin sudo cp src/redis-check-aof /usr/local/redis/bin sudo cp src/redis-check-rdb /usr/local/redis/bin # 配置文件 sudo mkdir -p /usr/local/redis/conf sudo cp redis.conf /usr/local/redis/conf sudo cp sentinel.conf /usr/local/redis/conf # 数据目录 sudo mkdir -p /usr/local/redis/data sudo mkdir -p /usr/local/redis/log # 创建链接 sudo ln -s /usr/local/redis/bin/redis-server /usr/bin/redis-server sudo ln -s /usr/local/redis/bin/redis-cli /usr/bin/redis-cli 提示: 复制完毕后,您可以删除 redis-6.

Read more

Using Redis as a Cache

当 Redis 用作缓存时,通常可以方便地让它在您添加新数据时自动驱逐旧数据。Redis 支持 6 种驱逐策略,你可以使用 maxmemory-policy 修改驱逐策略。默认是不驱逐,也就是说如果使用的内存超过了 maxmemory 限制,将提示 OOM。 你可以在 redis.conf 通过 maxmemory 2gb 设置,也可以通过 config set maxmemory 2gb 方式动态设置,注意: 在64bit系统下,maxmemory设置为0表示不限制内存使用,在32bit系统下,maxmemory不能超过3GB 驱逐策略 noenviction: 禁止驱逐数据(默认淘汰策略) 当 redis 内存数据达到 maxmemory,在该策略下,直接返回OOM错误; volatile-lru: 驱逐已设置过期时间的内存数据集中最近最少使用的数据; volatile-ttl: 驱逐已设置过期时间的内存数据集中即将过期的数据; volatile-random: 驱逐已设置过期时间的内存数据集中任意挑选数据; allkeys-lru: 驱逐内存数据集中最近最少使用的数据; allkeys-random: 驱逐数据集中任意挑选数据; volatile-lfu 驱逐已设置过期时间的内存数据集中使用频率最少的数据;(since 4.0) allkeys-lfu 驱逐内存数据集中使用频率最少的数据;(since 4.0) 如果 KEY 未设置过期时间,那么 volatile-random、volatile-ttl 和 volatile-lru 等同于 noenviction。 驱逐程序如何运作 重要的是要了解驱逐过程的工作方式如下: 客户端运行新命令,导致添加更多数据。 Redis 检查内存使用情况,如果大于 maxmemory limit ,则根据策略驱逐键。 执行新命令,等等。 所以我们不断地越过内存限制的边界,越过它,然后通过驱逐键返回到限制之下。 如果某个命令导致使用大量内存一段时间,则内存限制可能会明显超出。

Kafka Commands

常用 Kafka 命令 Topics 查询 topic 列表 ./bin/kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --list 查看 topic 描述 ./bin/kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --describe --topic my-topic Consumer Groups 查询消费组列表 ./bin/kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --list 查询指定的组各 topic 消息消费情况 ./bin/kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --describe --group my-group

MySQL Commands

常用 MySQL 命令 连接数配置 查看允许的最大连接数 show variables like '%max_connection%'; 如果过去曾达到此限制,则可以使用以下方法检查 SHOW GLOBAL STATUS LIKE 'max_use%'; 配置用户的最大并发连接数 GRANT USAGE ON *.* TO 'repl'@'%' WITH MAX_CONNECTIONS_PER_HOUR 100 MAX_USER_CONNECTIONS 10; 查看用户的最大并发连接数 SELECT User, Host, max_connections, max_user_connections FROM mysql.user; 设置最大连接数 set global max_connections=1000; 查看当前连接数 show status like 'Threads%'; Threads_cached 当前线程池中缓存有多少空闲线程 Threads_connected 当前的连接数 ( 也就是线程数 ) Threads_running 已经创建的线程总数 Threads_created 当前激活的线程数 ( Threads_connected 中的线程有些可能处于休眠状态 ) thread_cache_size 值过小会导致频繁创建线程,直接反映就是 show status 查看 Threads_created 值过大。 当 Threads_cached 越来越少 但 Threads_connected 始终不降 且 Threads_created 持续升高 这时可适当增加 thread_cache_size 的大小

Read more