0%

前言

本文用来记录nginx加keepalived实现高可用,避免出现单点故障。

准备

  • Linux CentOS7 系统
  • nginx 1.12.2
  • keepalived 1.3.5
阅读全文 »

收集了info命令的中文解释

信息中文解释
Server服务信息
redis_versionRedis 服务器版本
redis_git_sha1Git SHA1
redis_git_dirtyGit dirty flag
redis_build_idredis build id
redis_mode运行模式,单机或者集群
osRedis 服务器的宿主操作系统
arch_bits架构(32 或 64 位)
multiplexing_apiRedis 所使用的事件处理机制
process_id服务器进程的 PID
run_idRedis 服务器的随机标识符(用于 Sentinel 和集群)
tcp_portTCP/IP 监听端口
uptime_in_seconds自 Redis 服务器启动以来,经过的秒数
uptime_in_days自 Redis 服务器启动以来,经过的天数
hzredis内部调度(进行关闭timeout的客户端,删除过期key等等)频率,程序规定serverCron每秒运行10次
lru_clock以分钟为单位进行自增的时钟,用于 LRU 管理
executable
config_file配置文件路径
Clients客户端信息
connected_clients已连接客户端的数量(不包括通过从属服务器连接的客户端)
client_longest_output_list当前连接的客户端当中,最长的输出列表
client_biggest_input_buf当前连接的客户端当中,最大输入缓存
blocked_clients正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量
Memory内存信息
used_memory由 Redis 分配器分配的内存总量,以字节(byte)为单位
used_memory_human以人类可读的格式返回 Redis 分配的内存总量
used_memory_rss从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top 、 ps 等命令的输出一致。
used_memory_rss_human以人类可读的格式返回Redis已分配的内存总量
used_memory_peakRedis 的内存消耗峰值(以字节为单位)
used_memory_peak_human以人类可读的格式返回 Redis 的内存消耗峰值
total_system_memory
total_system_memory_human
used_memory_lualua引擎所使用的内存大小(以字节为单位)
used_memory_lua_human
maxmemory
maxmemory_human
maxmemory_policy内存淘汰机制,当内存使用达到阈值的时候,所有引起申请内存的命令会报错
mem_fragmentation_ratioused_memory_rss和used_memory之间的比率,小于1表示使用了swap,大于1表示碎片比较多
mem_allocator在编译时指定的redis所使用的内存分配器。可以是libc、jemalloc或者tcmalloc
Persistence持久化信息
loading服务器是否正在载入持久化文件
rdb_changes_since_last_save离最近一次成功生成rdb文件,写入命令的个数,即有多少个写入命令没有持久化
rdb_bgsave_in_progress服务器是否正在创建rdb文件
rdb_last_save_time离最近一次成功创建rdb文件的时间戳。当前时间戳 - rdb_last_save_time=多少秒未成功生成rdb文件
rdb_last_bgsave_status最近一次rdb持久化是否成功
rdb_last_bgsave_time_sec最近一次成功生成rdb文件耗时秒数
rdb_current_bgsave_time_sec如果服务器正在创建rdb文件,那么这个域记录的就是当前的创建操作已经耗费的秒数
aof_enabled是否开启了aof
aof_rewrite_in_progress标识aof的rewrite操作是否在进行中
aof_rewrite_scheduledrewrite任务计划,当客户端发送bgrewriteaof指令,如果当前rewrite子进程正在执行,那么将客户端请求的bgrewriteaof变为计划任务,待aof子进程结束后执行rewrite
aof_last_rewrite_time_sec最近一次aof rewrite耗费的时长
aof_current_rewrite_time_sec如果rewrite操作正在进行,则记录所使用的时间,单位秒
aof_last_bgrewrite_status上次bgrewriteaof操作的状态
aof_last_write_status上次aof写入状态
Stats一般统计信息
total_connections_received新创建连接个数,如果新创建连接过多,过度地创建和销毁连接对性能有影响,说明短连接严重或连接池使用有问题,需调研代码的连接设置
total_commands_processedredis处理的命令数
instantaneous_ops_per_secredis当前的qps,redis内部较实时的每秒执行的命令数
total_net_input_bytesredis网络入口流量字节数
total_net_output_bytesredis网络出口流量字节数
instantaneous_input_kbpsredis网络入口kps
instantaneous_output_kbpsredis网络出口kps
rejected_connections拒绝的连接个数,redis连接个数达到maxclients限制,拒绝新连接的个数
sync_full主从完全同步成功次数
sync_partial_ok主从部分同步成功次数
sync_partial_err主从部分同步失败次数
expired_keys运行以来过期的key的数量
evicted_keys运行以来剔除(超过了maxmemory后)的key的数量
keyspace_hits命中次数
keyspace_misses没命中次数
pubsub_channels当前使用中的频道数量
pubsub_patterns当前使用的模式的数量
latest_fork_usec最近一次fork操作阻塞redis进程的耗时数,单位微秒
migrate_cached_sockets
Replication主从信息
role实例的角色,是master or slave
connected_slaves连接的slave实例个数
master_repl_offset主从同步偏移量,此值如果和上面的offset相同说明主从一致没延迟
repl_backlog_active复制积压缓冲区是否开启
repl_backlog_size复制积压缓冲大小
repl_backlog_first_byte_offset复制缓冲区里偏移量的大小
repl_backlog_histlen此值等于 master_repl_offset-repl_backlog_first_byte_offset,该值不会超过repl_backlog_size的大小
CPUCPU信息
used_cpu_sys将所有redis主进程在核心态所占用的CPU时求和累计起来
used_cpu_user将所有redis主进程在用户态所占用的CPU时求和累计起来
used_cpu_sys_children将后台进程在核心态所占用的CPU时求和累计起来
used_cpu_user_children将后台进程在用户态所占用的CPU时求和累计起来
Cluster集群信息
cluster_enabled实例是否启用集群模式
Keyspace数据库相关的统计信息
db0db0的key的数量,以及带有生存期的key的数,平均存活时间

参考资料

  1. stackoverflow
  2. LUA脚本

Redis 介绍

Redis 是一款开源的,基于 BSD 许可的,高级键值 (key-value) 缓存 (cache) 和存储 (store) 系统。由于 Redis 的键包括 string,hash,list,set,sorted set,bitmap 和 hyperloglog,所以常常被称为数据结构服务器。你可以在这些类型上面运行原子操作,例如,追加字符串,增加哈希中的值,加入一个元素到列表,计算集合的交集、并集和差集,或者是从有序集合中获取最高排名的元素。

阅读全文 »

准备

  • Linux CentOS6.9 系统
  • Weblogic 12c
  • JDK 1.8

下载Weblogic Server

直接去官网下载,下载需要用户名和密码,如果没有注册一个即可

阅读全文 »

前言

为了代码适配Websphere,而搭建的环境

准备

  • Linux CentOS7 系统
  • WebSphere 8.5

安装IBM Installation Manager

下载IBM Installation Manager

基于IBM Installation Manager安装WebSphere,故下载


需要登录才可以下载,注册一个IBM ID就行

阅读全文 »

环境

  • Red Hat 6.5 操作系统
  • Oracle11g 安装包

下载Oracle11g安装包

官网。本文安装的是Oracle 11gR2。

安装准备(root用户下)

检查软件依赖包是否安装
1
rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers kernel-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel make numactl-devel sysstat unixODBC unixODBC-devel

上面哪个包显示XXX is not installed,就使用下面的命令安装必要的RPM包

1
yum install -y XXX
阅读全文 »

常用方法

对象方法

  1. start方法:启动线程,调用start方法后,系统才会开启一个新的线程来执行用户定义的子任务,同时,会为线程分配资源。

  2. run方法:用户不需要调用,当start方法启动线程并获得CPU执行时间后,便自动执行run方法体中的任务。(所以,继承Thread类必须重写run方法,在run方法中定义具体要执行的任务)。

  3. isAlive方法:判断线程是否处于活动状态

  4. sleep方法:交出CPU让线程睡眠,CPU可执行其他任务。

  5. yield方法:该线程就会把CPU时间让掉,让其他或者自己的线程执行(也就是谁先抢到谁执行)。但是yield不能控制具体的交出CPU的时间,只能让相同优先级的线程获取CPU执行时间的机会。
      注意,调用yield方法并不会让线程进入阻塞状态,而是让线程重回就绪状态,它只需要等待重新获取CPU执行时间,这一点是和sleep方法不一样的。

  6. join方法:让“主线程”等待“子线程”结束之后才能继续运行。实际上,调用join方法是调用了Object的wait方法,wait方法会让线程进入阻塞状态,并且会释放线程占有的锁,并交出CPU执行权限,所以join方法同样会让线程释放对一个对象持有的锁。

    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
    public class MainThread extends Thread {
    @Override
    public void run() {
    System.out.println(this.getName() + "开始执行");
    for (int i = 0; i <= 10; i++) {
    if (i == 3) {
    SubThread st = new SubThread();
    st.start();
    try {
    st.join();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }
    System.out.println(this.getName() + "执行完毕");
    }
    }
    public class SubThread extends Thread {
    @Override
    public void run() {
    System.out.println(this.getName() + "开始执行--->>>");
    // 延时操作
    for (int i = 0; i < 5; i++) {
    System.out.println(this.getName() + "执行中--->>>");
    }
    System.out.println(this.getName() + "执行完成");
    }
    }

    public class App {
    public static void main(String[] args) throws InterruptedException {
    MainThread mt = new MainThread();
    mt.start();
    }
    }

    输出结果:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    Thread-0开始执行
    Thread-1开始执行--->>>
    Thread-1执行中--->>>
    Thread-1执行中--->>>
    Thread-1执行中--->>>
    Thread-1执行中--->>>
    Thread-1执行中--->>>
    Thread-1执行完成
    Thread-0执行完毕

    说明:MainThread线程中启动了SubThread线程,等待SubThread执行完,主线程MainThread继续执行

  1. interrupt方法:中断;
    一、可以中断一个正处于阻塞状态的线程;
    二、通过组合interrupt方法和isInterrupted()方法可停止正在运行的线程。
阅读全文 »