Apache Servicecomb Pack Release Guide

发布环境准备 生成签名密钥 安装 GPG 在GnuPG官网下载 2.X 安装包. 安装完毕后可以使用如下命令查看版本 $ gpg --version gpg (GnuPG/MacGPG2) 2.2.20 libgcrypt 1.8.5 Copyright (C) 2020 Free Software Foundation, Inc. 配置 GPG 安装完毕后你可以找到 $HOME/.gnupg/gpg.conf 文件,并增加如下推荐配置 personal-digest-preferences SHA512 cert-digest-algo SHA512 default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed 用 GPG 生成密钥 根据提示使用 ASF 邮箱生成 GPG 的密钥,更多详细说明请参考 Generate Key with GPG $ gpg --full-gen-key gpg (GnuPG/MacGPG2) 2.2.34; Copyright (C) 2022 g10 Code GmbH This is free software: you are free to change and redistribute it.

Read more

Awesome Git Aliases

我们可以通过别名定义简化命令输出,创造自己的命令 打开 ~/.gitconfig 文件您可以看到如下片段,在这个片段中我们可以为已有命令定义别名 [alias] 例如我们创建分支是需要使用 git branch -b xxx 命令,那么我们可以将 branch 简化为 br。我们只需要增加如下配置 [alias] br = branch 这是我自己常用的配置 [alias] ci = commit -a co = checkout cob = checkout -b cl = clone st = status br = branch mr = merge cp = cherry-pick hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short type = cat-file -t dump = cat-file -p sync-up = !git fetch upstream && git checkout $1 && git rebase upstream/$1 && git push origin $1 && :

Awesome Git Hooks

commit-msg #!/bin/sh red='\033[0;31m' green='\033[0;32m' no_color='\033[0m' commit_msg_file="$1" commit_msg=$(cat "$commit_msg_file") max_length=50 if [ ${#commit_msg} -gt $max_length ]; then echo "${red}信息长度不能超过50!${no_color}" exit 1 fi if [ "" = "$(grep -E '^(\[(fix|feat)\]:\[.*]\[.*\]|\[(docs|style|ref|test|chore|tag|revert|perf)\]:\[.*\])$' $1)" ]; then echo "${red}ERROR:${no_color} 你的提交描述格式错误, 请参考如下样例:" echo "${green}[feat]:[单号][新增XXXX]" echo "[feat]:[][新增XXXX]" echo "[fix]:[CRMAIF_ISSUE_XXX][修改/修复XXXX]" echo "[fix]:[][修改/修复XXXX]" echo "[docs]:[单号][新增/修订/删除XXXX]" echo "[docs]:[新增/修订/删除XXXX]" echo "[style]:[调整XX页XX格式]" echo "[ref]:[重构XXXX]" echo "[test]:[测试XXXX]" echo "[chore]:[构建/变动XXXX]" echo "[tag]:[版本XXXX]" echo "[revert]:[撤销/回退XXXX]" echo "[perf]:[性能优化XXXX]${no_color}" exit 1 fi pre-commit #!/bin/sh red='\033[0;31m' green='\033[0;32m' no_color='\033[0m' USERNAME=$(git config user.

Read more

My Favorite Software

开发者工具 IntelliJ IDEA Java 开发集成环境 WebStorm Web 开发集成环境 Atom GitHub 推出的开源编辑器 VS Code DataGrip 数据库客户端工具 JProfiler JVM 性能分析工具 (收费) VisualVM JVM 性能分析工具 Dash 离线 API 文档软件 Sublime Text 4 命令行 iTrem2 终端工具 浏览器 Google Chrome 工具 The Unarchiver 解压许多不同种类的归档压缩文件 Android File Transfer Android 文件传输工具 密码 LastPass 多终端密码管理 GPG Suite GPG 加密工具 语言 Grammarly 语法修正 通信 微信 腾讯会议 邮件 Apple Email MacOS 自带 办公 WPS Office 笔记 Github Pages Typora Mackdown 编辑器 1.

Read more

Java Performance Profiling Using Flame Graphs

JDK 有很多性能测量工具 JConsole、VisualVM、HPROF 等。它们中的大多数将应用程序作为一个整体进行分析,并且需要一些繁琐的分析过程能到分析出类或方法级别的热点。 当我试图评估我们的一个服务的性能时,可以通过 CPU 火焰图的方法,它在找出代码的 CPU 使用率方面非常有效。 这篇文章记录了我在对投递服务进行基准测试时发现的性能问题,以及通过 CPU 火焰图找到热点方法并改进的调优过程。 要求 如果你使用 IntelliJ IDEA Ultimate ,那么这个 IDE 自带一个火焰图工具 Async Profiler 如果你要在生产环境生成火焰图,你可以借助这个工具 火焰图生成工具 async-profiler 场景 这一切源于一个基准测试。通常我们在交付一个产品前需要对这个服务进行基准测试。并通过基准测试结果得出在某些硬件基准下我们服务的性能指标,最终通过这些指标你可以回答用户提出的容量要求。 投递服务: 这个服务负责从客户端接收消息,放入待发送队列,并持久化到数据库中。然后立即返回给客户端。为了准确额模拟客户端我为此编写了一个基准测试客户端程序。 经过多轮基准测试,我们找到单机服务下了吞吐率最佳的参数,并得到了最佳吞吐率 QPS 769 总计发送 10000 笔业务 50 并发; Welcome to the Notifier CLI 4.8.0 Type 'help' for help. notifier>benchmark -T 123123 -n 10000 -c 50 -w 10 Benchmarking ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ Warm Up 10 Concurrency Level 50 Time taken for tests 13 seconds Complete requests 10000 Failed requests 5000 Refused requests 0 Requests per second 769 [#/sec] Time per request 67 [ms] Percentage of the requests served within a certain time (ms) 50% 46.

Read more

Docker IPv6 Support

本文介绍在 IPv6 网络主机上部署 Docker 主机 IPv6 网络检查 使用 ifconfig 命令查看是否已经配置了 IPv6 网络 $ ifconfig eth1 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.252.248.152 netmask 255.255.255.128 broadcast 10.252.248.255 inet6 2409:8010:5ac0:400:200::2d prefixlen 128 scopeid 0x0<global> inet6 fe80::f816:3eff:fe84:bc36 prefixlen 64 scopeid 0x20<link> ether fa:16:3e:84:bc:36 txqueuelen 1000 (Ethernet) RX packets 7150695 bytes 4751783652 (4.4 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 5018420 bytes 4436770306 (4.1 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 你可以看到主机已经获取到了 IPv6 地址 inet6 2409:8010:5ac0:400:200::2d 注意: fe80:: 开头的地址只是链接本地地址 分别在主机和其他主机使用 ping6 命令验证网络是否可达

Read more

Linux Command - Memory

Linux 内存相关命令 查看系统内存 # free -h total used free shared buff/cache available Mem: 251G 40G 1.4G 4.0G 209G 206G Swap: 4.0G 3.7G 312M 内存占用 TOP N # ps aux | sort -k4,4nr | head -n 5 200 139348 227 6.9 38668500 18410776 ? Ssl 3月10 1905:49 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-2.el8_3.x86_64/jre/bin/java...org.sonatype.nexus.karaf.NexusMain mysql 33407 1.2 2.2 349722012 6012524 ? Sl 2021 4596:18 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql mysql 118257 0.4 0.5 10170064 1536084 ? Ssl 2月28 66:04 /usr/share/elasticsearch/jdk/bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC root 42564 9.

Read more

Very High CPU usage Sonatype Nexus Docker

本文记录 Sonatype Nexus 私服遇到性能劣化问题的分析过程(未解决) 环境说明 使用 sonatype/nexus3 镜像启动,通过挂载卷存储数据 Nexus 配置,可以看到关键配置 -Xms8g -Xmx8g -XX:MaxDirectMemorySize=35158M -XX:+UseConcMarkSweepGC 200 105083 105062 99 11:01 ? 2-00:51:44 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-2.el8_3.x86_64/jre/bin/java -server -Dinstall4j.jvmDir=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-2.el8_3.x86_64/jre -Dexe4j.moduleName=/opt/sonatype/nexus/bin/nexus -XX:+UnlockDiagnosticVMOptions -Dinstall4j.launcherId=245 -Dinstall4j.swt=false -Di4jv=0 -Di4jv=0 -Di4jv=0 -Di4jv=0 -Di4jv=0 -Xms8g -Xmx8g -XX:MaxDirectMemorySize=35158M -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-1646967690.vgc -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=../sonatype-work/nexus3/log/jvm.log -XX:-OmitStackTraceInFastThrow -Djava.net.preferIPv4Stack=true -Dkaraf.home=. -Dkaraf.base=. -Dkaraf.etc=etc/karaf -Djava.util.logging.config.file=etc/karaf/java.util.logging.properties -Dkaraf.data=../sonatype-work/nexus3 -Dkaraf.log=../sonatype-work/nexus3/log -Djava.io.tmpdir=../sonatype-work/nexus3/tmp -Dkaraf.startLocalConsole=false -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=lib/endorsed -Di4j.vpt=true -classpath /opt/sonatype/nexus/.install4j/i4jruntime.jar:/opt/sonatype/nexus/lib/boot/nexus-main.jar:/opt/sonatype/nexus/lib/boot/activation-1.1.1.jar:/opt/sonatype/nexus/lib/boot/jakarta.xml.bind-api-2.3.3.jar:/opt/sonatype/nexus/lib/boot/jaxb-runtime-2.3.3.jar:/opt/sonatype/nexus/lib/boot/txw2-2.3.3.jar:/opt/sonatype/nexus/lib/boot/istack-commons-runtime-3.0.10.jar:/opt/sonatype/nexus/lib/boot/org.apache.karaf.main-4.3.6.jar:/opt/sonatype/nexus/lib/boot/osgi.core-7.0.0.jar:/opt/sonatype/nexus/lib/boot/org.apache.karaf.specs.activator-4.3.6.jar:/opt/sonatype/nexus/lib/boot/org.apache.karaf.diagnostic.boot-4.3.6.jar:/opt/sonatype/nexus/lib/boot/org.apache.karaf.jaas.boot-4.3.6.jar com.install4j.runtime.launcher.UnixLauncher run 9d17dc87 0 0 org.

Read more

Kafka 3.X

由于 ksqlDB 在 Kafka 之上运行,我们将使用 Docker Compose 来运行 Kafka 组件、ksqlDB 服务器和 ksqlDB CLI 客户端: Docker 创建文件 ksqldb.yml --- version: '2' services: zookeeper: image: confluentinc/cp-zookeeper:7.0.1 hostname: zookeeper container_name: zookeeper ports: - "2181:2181" environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 broker: image: confluentinc/cp-kafka:7.0.1 hostname: broker container_name: broker depends_on: - zookeeper ports: - "29092:29092" environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181' KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:9092,PLAINTEXT_HOST://localhost:29092 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 ksqldb-server: image: confluentinc/ksqldb-server:0.24.0 hostname: ksqldb-server container_name: ksqldb-server depends_on: - broker ports: - "8088:8088" environment: KSQL_LISTENERS: http://0.

Read more

Migrate Spring Data Elasticsearch from 3.x version to 4.x

Spring Data Elasticsearch 从 3.X 迁移到 4.X 因为需要将产品的 spring boot 2.1.6.RELEASE 升级到 2.3.12.RELEASE,升级过程中发现有一些需要迁移的部分,特此整理记录。 本文不是迁移指南,仅仅是工作中遇到的迁移问题笔记 依赖组件 组件 迁移前 迁移后 spring-data-elasticsearch 3.1.9 4.0.9 elasticsearch 6.4.3 7.6.2 GetQuery 已废弃 以下代码中 GetQuery 已经被废弃,并且 getQuery.setId 方法已经被删除 GetQuery getQuery = new GetQuery(); getQuery.setId(globalTxId); GlobalTransactionDocument globalTransaction = this.template .queryForObject(getQuery, GlobalTransactionDocument.class); 使用以下代码替换 Query query = new NativeSearchQueryBuilder().withIds(Collections.singletonList(globalTxId)).build(); SearchHit<GlobalTransactionDocument> result = this.template.searchOne(query, GlobalTransactionDocument.class); GlobalTransactionDocument globalTransaction = result.getContent(); ElasticsearchTemplate 已废弃 使用 ElasticsearchRestTemplate 代替 ElasticsearchTemplate ElasticsearchRestTemplate 索引操作 ElasticsearchTemplate 的 getClient().admin().indices() 用法已经废弃

Read more