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 moreGit 分支非常有用,您可以根据需要创建一个新分支,合并一个分支或删除一个分支。 您可以使用许多 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 HEAD 撤销上两次提交 ISSUE-4 解决网关服务日志中无法正确显示经过代理访问的请求端 IP 问题 $ git revert [倒数第一个提交] [倒数第二个提交]
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 moreLinux 磁盘相关命令 磁盘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 命令 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 命令记录 镜像 镜像列表按照大小排序 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 moreFlyway 连接 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记录在使用 Flyway 管理 Oracle 数据库脚本时遇到的一些问题,Flyway 5.2.1 - 7.7.3 都存在此问题。 1. Flyway not support Oracle 11g 异常信息 Caused by: org.flywaydb.core.internal.license.FlywayEditionUpgradeRequiredException: Flyway Enterprise Edition or Oracle upgrade required: Oracle 11.2 is no longer supported by Flyway Community Edition, but still supported by Flyway Enterprise Edition. at org.flywaydb.core.internal.database.base.Database.ensureDatabaseNotOlderThanOtherwiseRecommendUpgradeToFlywayEdition(Database.java:173) at org.flywaydb.core.internal.database.oracle.OracleDatabase.ensureSupported(OracleDatabase.java:91) at org.flywaydb.core.Flyway.execute(Flyway.java:514) at org.flywaydb.core.Flyway.migrate(Flyway.java:159) at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:65) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1855) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1792) ... 19 common frames omitted 修改 Flyway 5.2.4 OracleDatabase.java 社区版本做了版本号限制 修改 Flyway 6.5.7 OracleDatabase.
Read moreFlyway 通过 SQL Patch 脚本的方式管理数据库脚本版本,开发一段时间后会积攒大量脚本。当一个版本稳定后我们希望合并成一个全量脚本 1.首先对齐程序与数据库中的脚本版本号 查看程序中脚本版本清单,例如:程序中有三个版本的脚本 V1.0.0.0__init.sql V1.0.0.1__add_user_table.sql V1.0.0.2__modify_user_table.sql 查看数据库中历史版本记录表 (默认是 flyway_schema_history) 中执行过的脚本版本,例如: versions description script success 1.0.0.0 init.sql V1.0.0.0__init.sql 1 1.0.0.1 add_user_table.sql V1.0.0.1__add_user_table.sql 1 1.0.0.2 modify_user_table V1.0.0.2__modify_user_table.sql 1 这里只摘取了关键字段,你可以看到每个版本都已经执行,并且执行都是成功的 success=1 至此:你已经对齐了程序和数据库中脚本版本号,可以开始准备合并了 2.合并程序中的SQL脚本 合并多个脚本的内容到最大版本号的文件中,例如:将 V1.0.0.0__init.sql, V1.0.0.1__add_user_table.sql, V1.0.0.2__modify_user_table.sql 合并为 V1.0.0.2__init.sql 注意: 不是简单的文件合并,而是最终执行结果的合并 3.重新打包程序 只包含合 V1.0.0.2__init.sql 脚本的程序 4.停止所有老版本的程序 包含 V1.0.0.0__init.sql,V1.0.0.1__add_user_table.sql,V1.0.0.2__modify_user_table.sql 老脚本的程序 5.删除数据库中的版本历史表 默认是 flyway_schema_history 6.重启应用程序 在程序启动时设置基线版本参数为当前版本,设置这个参数的目的是告诉 Flyway 当前已经执行过 1.0.0.2 脚本了。这之前的脚本不要再执行了。 flyway.baseline-version=1.0.0.2 注意: 如果是空库,全新安装程序,那么则不需要设置 flyway.baseline-version 参数 7.结束 查看数据库中历史版本记录表 (默认是 flyway_schema_history) 中执行过的脚本版本,例如: versions description script success 1.
Read more