0%

性能优化

  • 设置操作系统禁止swap

  • 对于不需要聚合和排序的索引字段禁止doc_values,可以节省存储空间

  • 对于不需要模糊检索的字段使用keyword而不是text,可以避免建立索引时对文本进行分词

  • 减少映射字段,只提供需要检索、聚合或排序的字段,其他字段存储在hbase中,通过rowkey进行查询

    为了使es的file system cache可以存储更多的数据,所以让es存储尽量少的字段信息(最好是写入es的数据小于等于es的file system cache大小,这样就可以直接在内存查找了)

  • es数据量过大导致查询速度变慢,可以将es的数据进行冷热分离,冷数据单独写入一个索引,热数据写入另一个索引

SpringApplicationRunListener

在看源码的时候经常看到

1
2
SpringApplicationRunListeners listeners = getRunListeners(args);
listeners.starting();

这个SpringApplicationRunListeners是用来干嘛的呢

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public interface SpringApplicationRunListener {

/**
* run方法首次启动的时候立刻调用,可以进行早期的初始化操作
*/
void starting();

/**
* 环境被准备好的时候被调用,但是在ApplicationContext创建之前
*/
default void environmentPrepared(ConfigurableEnvironment environment) {
}

/**
* ApplicationContext已经被创建且准备好了,但是源还没被加载
*/
default void contextPrepared(ConfigurableApplicationContext context) {
}

/**
* ApplicationContext已经被加载但是在刷新之前
*/
default void contextLoaded(ConfigurableApplicationContext context) {
}

/**
* @since 2.0.0 ApplicationContext已经被刷新且启动但是CommandLineRunner和ApplicationRunner还没有被调用
*/
default void started(ConfigurableApplicationContext context) {
}

/**
* @since 2.0.0 run方法完成之前被调用,ApplicationContext已经被刷新且启动,CommandLineRunner和ApplicationRunner已经被调用
*/
default void running(ConfigurableApplicationContext context) {
}

/**
* @since 2.0.0 运行ApplicationContext出错
*/
default void failed(ConfigurableApplicationContext context, Throwable exception) {
}

}

Mongo使用shell操作

创建数据库

1
use DATABASE_NAME

如果数据库不存在,则会创建数据数据库,否则会切换到该数据库

查看数据库

1
show dbs

创建用户

1
2
3
4
# root用户
db.createUser({user:"root",pwd:"root",roles:["root"]})
#读写权限 readWrite表示读写权限,对yapi有读写权限,对admin有读权限
db.createUser({user:"work",pwd:"work",roles:[{role:"readWrite",db:"yapi"},{role:"read",db:"admin"}]})

MongoDB 数据库默认角色

角色描述 角色标识
数据库用户角色 read、readWrite
数据库管理角色 dbAdmin、dbOwner、userAdmin
集群管理角色 clusterAdmin、clusterManager、clusterMonitor、hostManager
备份恢复角色 backup、restore
所有数据库角色 readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、 dbAdminAnyDatabase
超级用户角色 root

查看该数据库下用户

1
show users

删除用户

1
db.dropUser("work")

修改用户密码

1
db.updateUser("work",{pwd:"123456"})

登录

1
db.auth("work","work")
阅读全文 »

MongoDB安装

导入包管理系统使用的公钥。

在终端上,发出以下命令以从https://www.mongodb.org/static/pgp/server-3.2.asc导入MongoDB公共GPG密钥:

1
wget -qO - https://www.mongodb.org/static/pgp/server-3.2.asc | sudo apt-key add -

该操作应以响应OK

但是,如果收到指示gnupg未安装的错误,则可以:

  1. gnupg使用以下命令安装及其所需的库:

    1
    sudo apt-get install gnupg
  2. 安装完成后,重试导入密钥:

    1
    wget -qO - https://www.mongodb.org/static/pgp/server-3.2.asc | sudo apt-key add -
阅读全文 »

jinfo报错

1
2
jinfo -flags 23765
Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process: ptrace(PTRACE_ATTACH, ..) failed for 23765: Operation not permitted

这是因为新版的Linux系统加入了 ptrace-scope 机制. 这种机制为了防止用户访问当前正在运行的进程的内存和状态, 而一些调试软件本身就是利用 ptrace 来进行获取某进程的内存状态的(包括GDB),所以在新版本的Linux系统, 默认情况下不允许

临时开启

1
sudo echo 0 > /proc/sys/kernel/yama/ptrace_scope

使用这种方法当系统重启的时候就会失效

永久开启,可以修改/etc/sysctl.d/10-ptrace.conf文件

1
kernel.yama.ptrace_scope = 0