git

格式化日志

git log –graph –pretty=format:“%C(yellow)%s %Cblue%an %Cgreen(%cr)”

%C :上色

%s :subject 。commit 主题(提交信息)

%an : author name 作者名字

%cr: commitor date ,relative 提交时间(commit变化时会更新,如commit –amend,rebase,cherry-pick)

%ar: author date,最初提交者的时间,不会变化。

原生只支持%Cgreen、%Cred、%Cblue三种颜色,

如果要其他颜色需要用%()指定颜色,如 C(yellow)

关闭sqlSession

加了@Transational

Service方法共花费了1072毫秒
Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4ed4a7e4]
Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4ed4a7e4]
Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4ed4a7e4]
本次查询共花费了1539毫秒

相差467毫秒、509、358、457

不加

28ms/24/30/32

sql查询排序可能的问题

假设有表 t_order(id,user_id,type),t_type(id,type_name)

如果

select 
    t1.id,t1.user_id,t2.type_name 
from 
    t_order t1 , t_type t2 
where 
    t1.type = t2.id 
order by 
    t1.type 
limit 
    0,20

看似没有什么不对

但是如果相同type的数据比较多的时候,查询到的分页可能是不“稳定”的。

因为关系数据库的集合运算是对集合的运算,如果不做排序,或者排序后相同数据的数量比较多,会导致某些行一会出现在这一页,一会又出现在另外一页的灵异现象。

解决办法是,需要分页的时候,务必要选择一个合适的字段来排序,这个字段最好能覆盖全部的行。

Mysql查询数据库大小

查询表大小

查询数据库大小

select table_schema as '数据库',sum(table_rows) as '记录数',sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)'from information_schema.tables where table_schema='数据库名称';

Redis

dbsize 查询数据总条数,不一定准确

scan 非阻塞式遍历,用于替代keys

SCAN cursor [MATCH pattern] [COUNT count]

The default COUNT value is 10.

其中 cursor 是一个数字字符串,用于表示当前遍历到的位置

从0开始遍历,如果返回cursor 是0,遍历已经遍历结束。

count表示一次遍历的位置

info [信息]

查看redis的基本信息,如server、cpu、slave等信息

Git登录不上问题/ssh失败排查

ssh [options] [user@]hostname [command]

查看ssh的过程

如:

ssh -v root@127.0.0.1

ssh -vvv root@127.0.0.1

linux查询文件夹大小

可以查看文件及文件夹的大小

du -h --max-depth=1 [path]

可以查看一级文件夹大小、使用比例、档案系统及其挂入点

df -h

Linux

清空某个文件的内容

第一种方法:

cat /dev/null > 文件路径 

意思是清空该文件。

/dev/null : 在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个EOF。
在程序员行话,尤其是Unix行话中,/dev/null 被称为位桶(bit bucket)或者黑洞(black hole)。空设备通常被用于丢弃不需要的输出流,或作为用于输入流的空文件。当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。

第二种方法:

echo "" > 文件路径

需要注意的是echo "" >>(两个大于号),则表示追加写入。

linux 免密登录其他主机

客户端设置:

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
```
 ssh-copy-id 用户@要远程登录的主机地址 

输入密码,然后保存即可。

接下来就可以免密远程登录了

ssh 用户@要远程登录的主机地址

远程登录并执行命令

在ssh后添加要执行的命令即可。

ssh apps@10.10.1.101 "COMMANDS"

JVM调优

jstack(查看线程)、jmap(查看内存)、jstat(性能分析)

打印线程信息

jstack pid

image.png

导出堆快照(full gc)

生产要谨慎执行该操作,会导致应用挂起~ 会触发full gc ~

jmap -dump:live,format=b,file=/filename.dump pid

:live 表示dump出可达对象。体积相对于无:live dump会小一些。

jmap -dump:format=b,file=/filename.dump pid

打印堆信息

jmap -heap pid

image.png

image.png

打印堆对象信息(full gc)

这个命令在生产环境也需要小心, 会触发full gc

jmap -histo:live 19932 > /data/temp.txt

:live表示统计的是可达对象。

image.png

实时监控远程服务器jvm

可以采用jconsole实现、也可以使用Jprofile

首先,在需要被监控的java进程启动时加入以下启动参数:

JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.202.121 -Dcom.sun.management.jmxremote"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=12345"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.pwd.file=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.101-3.b13.el7_2.x86_64/jre/lib/management/jmxremote.password"

根据选择,若需要密码文件、需要注意文件权限为600,另外,需要确保端口被开放。

打开本地jconsole客户端,用192.168.202.121:12345连接即可。

打印垃圾回收统计信息

注意:该统计信息指的是从应用程序启动到当前的信息。

jstat -gc pid

image.png

jstat -gcutil pid 1000 5

以上表示:1000ms内,打印5次gc信息。

S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

查看某jvm进程启动参数

jcmd pid VM.flags

image.png

image.png

查看java默认启动参数

java -XX:+PrintCommandLineFlags -version

image.png

查看java全部默认参数

java -XX:+PrintFlagsFinal -version > flag.txt

若不需要输出文件则去掉> flag.txt

image.png

Redis

批量模糊删除keys

./redis-cli --scan --pattern "prefix:????????????????????????????????" | xargs -L 2000 ./redis-cli del

2000表示一次从scan的结果中取2000条数据来del。

redis的模糊操作

仅支持三种正则表达式

1. * 任意长度的任意字符

2. ? 任意单一字符

3. [xxx] 匹配方括号中的一个字符

redis慢查询

config set slowlog-log-slower-than [微秒]

config set slowlog-max-len [number]

slowlog get [number]

config get slowlog-log-slower-than

Maven

安装jar到本地仓库

mvn install:install-file -DgroupId=org.codehaus.mojo -DartifactId=sonar-maven-plugin -Dversion=3.4.1 -Dpackaging=jar -Dfile=maven-plugin-3.4.1.jar