《被讨厌的勇气》
简介《被讨厌的勇气》 —— “自我启发之父”阿德勒的哲学课 [日]案见一郎, 古贺史健渠海霞 —— 译 书序小心检视,你的成功是否只是以害怕被他人讨厌而换来的。若是如此,那你的成功不幸只代表”你为他人活了一辈子” —— 陈文茜 心里创伤并不存在阿德勒在否定心理创伤学说的时候说了下面这段话:“任何经历本身并不是成功或者失败的原因。我们并非因为自身经历中的刺激——所谓的心理创伤——而痛苦,事实上我们会从经历中发现符合自己目的的因素。决定我们自身的不是过去的经历,而是我们自己赋予经历的意义。” 阿德勒说,决定我们自己的不是“经验本身”而是“赋予经验的意义”。请你注意这一点。并不是说遭遇大的灾害或者幼年受到虐待之类的事件对人格形成毫无影响。相反,影响会很大。但关键是经历本身不会决定什么。我们给过去的经历“赋予了什么样的意义”,这直接决定了我们的生活。人生不是由别人赋予的,而是由自己选择的,是自己选择自己如何生活。 一切烦恼都来自人际关系在人际关系中根本不可能不受伤。只要涉入人际关系就会或大或小地受伤,也会伤害别人。阿德勒曾说“要想消除烦恼,只有一个人在宇宙中生存”。但是,那种事情根...
为什么Redis集群使用16384个哈希槽
一、Redis集群特点1.1 Redis集群拓扑结构Redis集群是一个网状结构,每个节点都通过TCP连接跟其它每个节点连接。 在一个有N个节点的集群中,每个节点都有N-1个流出的TCP连接和N-1个流入的TCP连接,这些TCP连接会永久保持,并不是按需创建的。 1.2 Redis集群数据分片Redis集群的实现方案: 客户端分区,代表为 Redis Sharding 代理分区方案,主流实现的有方案有 Twemproxy 和 Codis 查询路由方案,Redis默认实现方案。 1.3 Redis 集群没有使用一致性hash, 而是引入了 哈希槽的概念.Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽,举个例子,比如当前集群有3个节点,那么: 节点 A 包含 0 到 5500号哈希槽.节点 B 包含5501 到 11000 号哈希槽.节点 C 包含11001 到 16384号哈希槽.这种结构很容易添加或者删除节点. 比如如果我想新添加个节点D, 我需要从节点 A, B, C中得部分槽到D...
Redis哨兵模式和集群模式
一、Redis哨兵模式搭建1.1 Redis 的 主从复制模式 和 Sentinel 高可用架构 的示意图 1.2 基于Docker换件搭建Redis哨兵模式本次搭建Redis哨兵模式仅为测试使用,且因资源有限,在一台云主机上安装docker引擎,通过docker容器搭建哨兵模式。 1.2.1 安装环境云主机配置:1核2G 所需软件及环境:docker, docker-compose, redis镜像 1.2.2 Redis主从复制创建docker-compose.yml配置文件: docker-compose.yml version: '3' services: master: image: redis container_name: redis-master command: redis-server --requirepass redis_hyk --masterauth redis_hyk ports: - 6379:6379 slave1: image: redis contain...
Maven Resources Plugin 二进制文件filtering
一、问题背景Maven项目中打包使用Maven Resources Plugin拷贝配置文件,使用Filtering来处理项目配置文件中的变量,POM文件如下所示: <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <testResources> <testResource> <directory>src/test/resources</directory> <filtering>true</filtering> </tes...
一次Java进程物理内存占用超过最大堆内存分析
一、背景说明项目测试过程中,测试人员反馈使用Excel导入100万号码时报错,通过Top命令查看到该java进程占用物理内存大小为3.4G,而且内存持续占用,一直没有释放,怀疑是不是有内存泄露的情况。 PS:上图为后续重新截的图,比第一次物理内存占用小 JVM配置参数如下: server.java.opts=-d64 -XX:MaxPermSize=192M -Xms3000M -Xmx3000M -XX:+HeapDumpOnOutOfMemoryError 二、问题排查查看日志发现出现了OOM, 报错信息未:java.lang.OutOfMemoryError: GC overhead limit exceeded,并生成了堆内存快照文件java_pid31734.hprof。通过jVisualVM工具分析java_pid31734.hprof文件。 java进程发生OOM时生成的堆内存快照文件大小为3.4G。 由于在项目中使用POI去读取Excel文件的,从内存快照中可以看到大量的内存被POI相关的对象占用。 发生OOM后java进程并没有退出...
RocketMQ设计原理分析
RocketMQ设计原理分析——技术分享PPT 您的浏览器不支持显示PDF文件 📥 点击这里下载PDF文件
Linux中的CommitLimit与OOM Killer
一、背景说明在测试过程中遇到一个Java进程由于申请内存过大导致被Linux OOM killer杀掉的问题,所以来分析一下Linux中的CommitLimit与OMM killer机制。 二、Linux内存分配机制 Linux系统允许程序申请比系统可用内存更多的内存空间,这个特性叫做 overcommit 特性,这样做可能是为了系统的优化,因为不是所有的程序申请了内存就会立刻使用,当真正的使用时,系统可能已经回收了一些内存。为了避免内存的浪费,在分配页面时,Linux 采用的是按需分配物理页面的方式。譬如说,某个进程调用malloc()申请了一块小内存,这时内核会分配一个虚拟页面,但这个页面不会映射到实际的物理页面。从图中可以看到,当程序首次访问这个虚拟页面时,会触发一个缺页异常 (page fault)。这时内核会分配一个物理页面,让虚拟页面映射到这个物理页面,同时更新进程的页表 (page table)。 2.1 Linux的Memory Overcommit这种按需分配物理页面的方式,可以大大节省物理内存的使用,但有时会导致 Memory Overcommit。所谓 M...
突然消失的Java进程
一、背景说明在一次大批量数据测试时,一个Java服务模块突然宕掉,并且连续出现了好几次。检查服务已经开启了打印堆栈信息-XX:+HeapDumpOnOutOfMemoryError,但是在服务器运行目录下并没有发现.hprof文件生成。服务器总内存为16G,当前Java服务设置的内存为:-Xms5000M -Xmx8000M。 二、原因分析Java进程突然被干掉无外乎以下三种情况: Linux OOM killer 杀死了Java进程 JVM自身故障 JVM OOM导致进程退出 2.1 Linux 的OOM killerLinux内核有一个OOM(out of memory) killer机制,当系统内存严重不足时,OOM killer会选择一个或多个进程杀死。关于OOM killer机制可参考上一篇文章Linux中的CommitLimit与OOM Killer.。因此,当java进程突然消失时,首先怀疑是不是被OOM killer杀掉了。 查看系统日志文件/var/log/messages $egrep -i 'killed process' /...
RocketMQ中Mmap原理分析及使用
一、Mmap基础概念Mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。 二、Mmap内存映射原理 mmap内存映射的实现过程,总的来说可以分为三个阶段: (一)进程启动映射过程,并在虚拟地址空间中为映射创建虚拟映射区域 1、进程在用户空间调用库函数mmap,原型:void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset); 2、在当前进程的虚拟地址空间中,寻找一段空闲的满足要求的连续的虚拟地址 3、为此虚拟区分配一个vm_area_struct结构,接着对这个结构的各个域进行了初始化 4、将新建的虚拟区结构(vm_area_s...
RocketMQ消息存储
一、消息存储架构图 二、消息存储2.1 消息存储文件 文件名称 作用 文件大小 文件格式 说明 CommitLog 消息主体以及元数据的存储主体 单个文件大小默认1G 消息顺序写入文件,当文件满了,写入下一个文件 文件名为20位,如一个文件名为00000000000000000000代表以一个文件,起始偏移量为0,文件大小为1G=1073741824,后面新增文件的名称基于上一个文件名累加1G,起始偏移量从上一个文件继续累计。 ConsumeQueue 消息消费队列 每个条目20个字节,单个文件由30W个条目组成 每一个条目共20个字节,分别为8字节的commitlog物理偏移量、4字节的消息长度、8字节tag hashcode 单个文件由30W个条目组成,可以像数组一样随机访问每一个条目,每个ConsumeQueue文件大小约5.72M IndexFile 索引文件 固定的单个IndexFile文件大小约为400M,一个IndexFile可以保存 2000W个索引 IndexFile的底层存储设计为在文件系统中实现HashMap结构 rocketmq...









