Git Stash

你在当前分支上开发代码,此时不想 commit,但是又想切换到其他分支完成其他的工作,此时可以用 stash 在当前分支执行 stash 将当前分支未提交的代码隐藏起来 $ git stash Saved working directory and index state WIP on SCB-1577: 2554be3d SCB-1593 Add notice for Boringssl support ciphers (base) bogon:servicecomb-pack zhanglei$ 此时你可以看到已经存储到一个id为 2554be3d 里了,这时你可以用 git status 查看已经没有要提交的内容了 git status On branch SCB-1577 nothing to commit, working tree clean (base) bogon:servicecomb-pack zhanglei$ 这时你就可以切换到其他分支开始新的工作 (base) bogon:servicecomb-pack zhanglei$ git checkout master Switched to branch 'master' Your branch is up to date with 'origin/master'. 返回原来的分支继续工作 git checkout SCB-1577 Switched to branch 'SCB-1577' 查看以前隐藏的修改内容 git stash list stash@{0}: WIP on SCB-1577: 2554be3d SCB-1593 Add notice for Boringssl support ciphers (base) bogon:servicecomb-pack zhanglei$ 恢复隐藏内容继续工作,使用 git stash apply {id} (base) bogon:servicecomb-pack zhanglei$ git stash apply stash@{0} On branch SCB-1577 Changes not staged for commit: (use "git add <file>.

Read more

Synchronizing Your Forked Git Project

当你 fork 一个仓库后,可以时用此方法使你 fork 后的仓库 master 分支保持和上游 master 分支的同步 使用 rebase 命令同步上游 master 分支到你本地的 master 分支,并推送到你 fork 后的仓库 git fetch upstream git checkout master git rebase upstream/master git push -f origin master 或者你确定放弃你本地所有的修改,则可以简单的重置为上游版本 git fetch upstream git checkout master git reset --hard upstream/master git push -f origin master 如果你也想同步 master 分支的修改到你的功能分支 git checkout <分支名> git rebase master git push -f origin <分支名>

Linux Command - Network

Linux 网络相关命令 可以使用 yum install iperf3 安装这个工具,或者从网站 https://iperf.fr/iperf-download.php 下载 测试 TCP 吞吐量 假设我们要测试 10.1.207.180 和 10.1.207.181 两个服务器之间的带宽 先在其中一台服务器 10.1.207.181 服上启动 iperf3 服务 [root@oss-irms-181 ~]# iperf3 -s -p 5001 ----------------------------------------------------------- Server listening on 5001 ----------------------------------------------------------- 再在另一台机器 10.1.207.180 启动客户端连接服务端 10.1.207.181 测试 [root@oss-irms-180 ~]# iperf3 -c 10.1.207.181 -P 4 -t 30 -i 2 -p 5001 Connecting to host 10.1.207.181, port 5001 [ 4] local 10.1.207.180 port 49244 connected to 10.1.207.181 port 5001 [ 6] local 10.

Read more

Git Reset HEAD

Git 分支非常有用,您可以根据需要创建一个新分支,合并一个分支或删除一个分支。 您可以使用许多 git 命令来管理 git 中的分支。 当您使用 git checkout 分支时,HEAD会指出最后的提交。 简单来说,您可以说 Git HEAD 是当前分支。 每当您签出一个分支或创建一个新分支时,Git HEAD 都会转移它。 HEAD 是对当前检出分支中最后一次提交的引用。 在存储库中,HEAD 始终指向当前分支的起点。 换句话说,HEAD 是指向下一个提交的父对象或下一个提交将发生的地方的指针。 更具体地说,HEAD 是一个移动指针,它可以引用或可以不引用当前分支,但是它始终引用当前提交。 什么是 HEAD^ 插入符(^)是 Commit 的父级。 什么是 HEAD~ 代字号(〜)是一行几个字符(^)的简写字符。 HEAD〜2 与 HEAD ^^ 的作用相同。 如果写数字,则使用的默认值为1,因此 HEAD〜 等价于 HEAD ^。 如何检查HEAD的状态 您可以使用以下命令查看当前 Git HEAD 指向的位置: $ cat .git/HEAD ref: refs/heads/master 并且,你可以使用以下命令查看指向 HEAD 的 commit 的 Hash ID: $ git rev-parse --short HEAD 6f975a5 Detached HEAD HEAD 是您目前的工作分支。 当您尝试 git checkout 分支时,HEAD 指向该分支的顶部,这样您就可以继续工作而没有任何困难。

Read more

Git Revert

撤销上一次提交 $ git revert HEAD 撤销上两次提交 ISSUE-4 解决网关服务日志中无法正确显示经过代理访问的请求端 IP 问题 $ git revert [倒数第一个提交] [倒数第二个提交]

Important JVM Options

Heap Memory -XX:MetaspaceSize Metaspace 空间初始大小,如果不设置的话,默认是20.79M。这个初始大小是触发首次 Metaspace Full GC 的阈值,例如 -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize Metaspace 最大值,默认不限制大小,但是线上环境建议设置,例如 -XX:MaxMetaspaceSize=512M GC -Xnoclassgc 表示关闭JVM对类的垃圾回收,缺省情况下,当一个类没有任何活动实例时,JVM 就会从内存中卸装该类,但是这样会使性能下降。如果关闭类垃圾回收,就可以消除由于多次装入和卸装同一个类而造成的开销 -XX:+UseParNewGC 设置年轻代为并行收集 -XX:MaxTenuringThreshold 控制新生代需要经历多少次GC​晋升到老年代中的最大阈值,默认值 15 -XX:+CMSParallelRemarkEnabled CMS收集算法步骤如下:初始标记 -> 并发标记 -> 重新标记 -> 标记清除。 其中 初始标记和重新标记都需要STW,即暂停用户线程。 CMSParallelRemarkEnabled参数可以让重新标记阶段进行并行重新标记,减少暂停时间 -XX:SurvivorRatio 设置 Eden、S0、S1 分配比例,默认值是 8 -XX:SurvivorRatio=5 表示 Eden 占 50%,S0、S1 平分剩余空间 -XX:+UseCompressedOops In short, don’t turn it on, use a version which has it on by default. https://stackoverflow.com/questions/11054548/what-does-the-usecompressedoops-jvm-flag-do-and-when-should-i-use-it -XX:+DisableExplicitGC 禁止 System.gc() 触发 GC 操作,当没有开启 DisableExplicitGC 这个参数时,你会发现JVM每个小时会执行一次Full GC,这是因为JVM在做分布式GC,为RMI服务的, 可以通过 sun.

Read more

Linux Command - Disk

Linux 磁盘相关命令 磁盘IO dd [root@localhost ~]# dd if=/dev/zero of=./a.dat bs=8K count=1M conv=fdatasync 记录了8192+0 的读入 记录了8192+0 的写出 8589934592字节(8.6 GB)已复制,14.8606 秒,578 MB/秒 [root@localhost ~]# dd if=./a.dat of=/dev/null bs=1M count=8k iflag=direct 记录了8192+0 的读入 记录了8192+0 的写出 8589934592字节(8.6 GB)已复制,14.2462 秒,603 MB/秒 磁盘空间 df 查看磁盘各个分区的空间大小、占用、可用等信息 $ df -h Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/disk1s5 466Gi 10Gi 128Gi 8% 488463 4881964417 0% / devfs 192Ki 192Ki 0Bi 100% 663 0 100% /dev /dev/disk1s1 466Gi 318Gi 128Gi 72% 4557528 4877895352 0% /System/Volumes/Data /dev/disk1s4 466Gi 8.

Read more

Git Commands

常用 Git 命令 Init 在已有目录中初始化 GIT 仓库 $ git init $ git remote add origin <仓库地址> $ git add . $ git commit -m "Initial commit" $ git push -u origin master Branch 创建分支 git checkout -b <分支名> 推送分支 git push origin <分支名> 修改分支名 git branch -m <旧分支名> <新分支名> 删除本地分支 git branch -D <分支名> 删除远程分支 git push origin --delete <分支名> 拉取远程分支 git fetch origin <分支名> 拉取远程分支并切换 git checkout -b <分支名> origin/<分支名> 当前分支会退到指定版本

Read more

Docker Commands

常用 Docker 命令记录 镜像 镜像列表按照大小排序 docker images --format "{{.ID}}\t{{.Size}}\t{{.Repository}}" | sort -k 2 -h 删除所有镜像 docker rmi -f $(docker images | awk '{print $3}') 删除所有 dangling 镜像 docker rmi -f $(docker images -a | grep "<none>" | awk '{print $3}') 导出镜像 docker save -o postgres_9.6.tar postgres:9.6 docker save postgres:9.6 | gzip > postgres_9.6.tar 导入镜像 docker load -i postgres_9.6.tar 容器 删除所有 Exited 容器 docker rm $(docker ps -a | grep Exited | awk '{print $1}') 停止并删除所有容器 docker stop $(docker ps | awk '{print $1}') docker rm -f $(docker ps -a | awk '{print $1}') 停止 dead 容器 删除实例时提示 device or resource busy

Read more

Flyway hung on the MySQL Router + MGR

Flyway 连接 MySQL Router 后启动卡在 GET_LOCK 语句 现象 MySQL MGR + Router 部署高可用集群 Flyway 客户端使用 jdbc:mysql:loadbalance 连接 初始化 Schema History 表、或者执行多个 SQL 脚本时 当满足以上条件时,Flyway 会卡在初始化阶段,经过分析发现停顿在执行 GET_LOCK 语句时 原因 Flyway 默认在执行 DDL 脚本时不启用事务,在初始化时 Flyway 会先执行 GET_LOCK 锁定数据库,然后再执行 DDL 脚本。当使用 jdbc:mysql:loadbalance 连接时,会随机选择一个数据源,如果执行 GET_LOCK 和 执行 DDL 不是一个数据源,就会导致执行等待锁释放 解决办法 在启动时设置 group=true 参数,这样 Flyway 在初始化时就会启用事务,确保一个事务内的 DDL 都在一个数据源执行 ISSUE-3154 public class FlywayTestManual { String url="jdbc:mysql:loadbalance://192.168.51.206:3810,192.168.51.207:3810/nc_notifier?roundRobinLoadBalance=false&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&allowMultiQueries=true&allowPublicKeyRetrieval=true"; String user="user"; String password="pass"; @Test public void test(){ Flyway flyway = Flyway.

Read more