buffer和cache的区别

linux:buffer是缓存裸设备的读写,cache是缓存文件系统的读写。 应用系统:buffer主要为了解决CPU和其他存储设备之间速度不对等的问题,比如编辑编写错误的时候使用。定期会刷新; cache主要用于在内存中缓存原本需要从磁盘读取的数据。 refer:http://www.differencebetween.net/technology/hardware-technology/difference-between-cache-and-buffer/ ...

单例的几种实现方式

饿汉模式 public class Singleton { private static Singleton instance = new Singleton(); private Singleton(){}; public Singleton getInstance(){ return instance; } } 懒汉模式 public class ...

ThreadLocal内存泄漏问题

上一篇做了个实验,不正确的使用ThreadLocal可能会导致内存泄漏,这一篇就来讲一下为什么ThreadLocal会导致内存泄漏。 ThreadLocal实现原理 ThreadLocal的核心是一个ThreadLocalMap,ThreadLocalMap中保存了一个Entry数组,Entry继承了ThreadLocal的弱引用:ThreadLocalMap中元素的key为当前ThreadLocal对象,而value对应线程的变量副本,每个线程可能存在多个ThreadLocal。 static class Entry extends WeakReference<ThreadLocal<?>> ...

JVM排查问题

挑个趁手的好工具 mac中安装MAT,不需要先装Eclipse,可以直接安装MAT。 下载 https://www.eclipse.org/mat/downloads.php 启动 下载完成后解压,到目录mat.app/Contents/MacOS 下启动 ./MemoryAnalyzer ...

java一些参数

CPU消耗过高会引起上下文切换的增加,但并不代表这个就不正常了。正常情况下上下文切换在几百到几千,高峰时段会上升至几万,甚至几十万。 GC在核心业务应用服务中越久发生越合适,且GC的时间不要太长。一般生产环境的FGC几天一次是比较正常的。 单核CPU的线程安全问题:线程安全除了要保证可见性,还需要保证原子性、有序性。 ...

VisualVM

线程数=N(CPU核数)*(1+WT(线程等待时间)/ST(线程时间运行时间)) VisualVM查看 'self time' is a 'wall-clock' time spent in method itself (without ...

kafka UT

@RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK) public class KafkaTest { @Autowired private WebApplicationContext wac; @Autowired KafkaTemplate<String, String& ...

Redis分布式锁

todo: https://learnku.com/articles/4211/unlock-the-correct-position-of-the-redis-lock https://juejin.im/post/5cc165816fb9a03202221dd5 https://crossoverjie.top/2018/03/29/distributed-lock/distributed-lock-redis/ ...

MAC下使用GDB调试redis

因为在看redis源码,调试的时候一直出问题,所以记录一下踩过的坑。 权限不足,或者启动后卡住 提示: Unable to find Mach task port for process-id 43536: (os/kern) failure (0x5). (please ...

volatile内存模型

Java中的volatile CPU的读写操作 CPU在cache line状态的转化期间是阻塞的,经过长时间的优化,在寄存器和L1缓存之间添加了LoadBuffer、StoreBuffer来降低阻塞时间,LoadBuffer、StoreBuffer,合称排序缓冲(Memoryordering Buffers (MOB)),Load缓冲64长度,store缓冲36长度,Buffer与L1进行数据传输时,CPU无须等待。 CPU执行load读数据时,把读请求放到LoadBuffer,这样就不用等待其它CPU响应, ...

MAC下使用HSDIS生成汇编代码并使用JITWatch查看

jdk 安装jdk8 笔者之前使用的java12版本愣是不能使用HSdis和JITWatch,于是就安装了JDK8。 前往Oracle官网下载jdk8: https://www.oracle.com/java/technologies/javase-jdk8-downloads.html 多版本管理 试了一下使用jenv不能用,还是老实export JAVA_HOME参数。 环境变量配置 /usr/ ...

动态创建FeignClient

之前在项目里面都是指定一个interface做FeignClient,带上FeignClient的注解,这样子每一个微服务都需要有个interface。在做中台项目的时候需要通过配置化来创建FeignClient,就想到怎么手动去创建FeignClient。一番操作猛如虎后,写个memo以防自己以后忘记了。 创建eureka服务 在 https://start.spring.io/ 中勾选Eureka Server,下载下来后: 代码:Application类上加注解 @EnableEurekaServer 配置文件: ...

MAC编译openjdk

配置mac环境:brew install freetype ccache,安装xcode,gcc和make都需要 代码推荐https://hg.openjdk.java.net/jdk/jdk12/ 去获取zip包(点击browse->zip) 下载解压后 chmod ...

JVM字节码调用指令

invokestatic:用于调用静态方法。 invokespecial:用于调用私有实例方法、构造器,以及使用 super 关键字调用父类的实例方法或构造器,和所实现接口的默认方法。 invokevirtual:用于调用非私有实例方法。 invokeinterface:用于调用接口方法。 invokedynamic:用于调用动态方法。 ...

任务调度系统调研

因为需要用到java系的调度系统,所以最近在调研。 国内的主要有xxl-job、saturn、quartz和sia-task,因为quartz有数据库锁的问题,saturn没有说明是否可以做任务依赖,所以初步选择xxl-job和sia-task。 xxl-job github: https://github.com/xuxueli/xxl-job/ xxl-job部署非常方便,起mysql、起调度中心和执行器即可: 部署 mysql ...

TF-Serving源码分析—模型加载部分

背景 因为要加一个检测模型加载是否成功的接口,需要读取TF-Serving中保存的加载到内存的model_config_file。 一开始在ServerCore里面加一个函数getConfig(),加锁访问该类中的config_,该变量保存了模型配置。 Status ServerCore::getConfig(std::unordered_map<string, string>* config_map) ...

GUARDED_BY —— clang的线程安全分析模块 thread safety analysis

通过代码注解(annotations )告诉编译器哪些成员变量和成员函数是受哪个 mutex 保护,这样如果忘记了加锁,编译器会给警告。因为在后续维护别人的代码时候,往往不像原作者那样深刻理解设计意图,特别容易遗漏线程安全的假设。 Thread Safety Annotations 可以方便阅读代码,而且在编译的时候会检查锁的状态。 其工作原理非常类似于多线程程序的类型系统。除了声明数据类型之外,还可以声明在多线程环境中如何控制对该数据的访问。比如如果foo遍历被互斥锁mu保护,那么只要有一段代码在没有先锁定mu的情况下读取或写入foo, ...

const在变量前后的含义

const int * p1=&me;//p1可变,p1不可变,此时不能用p1来修改,但是p1可以转向 int * const p2=&me;//p2不可变,p2可变,此时允许p2来修改其值,但是p2不能转向。 const int ...

C++的std::optional

解决函数多个返回值 为了解决C++函数返回多个值的问题,以前的做法通常是把返回指的指针作为入参传入,用函数的返回值作为运行状态的标识,比如下面这段,把指针output传入: #include <iostream> using namespace std; int func(const string& str, ...

JVM内存 — 《java核心技术》

JVM内存区域划分 程序计数器,每个线程都有自己的程序计数器,存储当前线程正在执行的Java方法的JVM指令地址; Java虚拟机栈,每个线程在创建时都会创建一个虚拟机栈,内部保存一个个栈帧,对应着一次次方法调用。如果在该方法中调用了其他方法,则会创建新的栈帧。栈帧中存储着局部变量表、操作数栈、动态链接、方法正常退出或异常退出的定义等; 堆,放置Java对象实例,是垃圾收集器重点照顾的区域; 方法区,所有线程共享的一块内存区域,用于存储元数据, ...

Spring sidecar模式纳入TF-Serving(二):mac上编译TF-Serving

前言 因为卤煮的云主机只有1G的内存,blade编译的时候一直OOM,所以只能在自己的mac上编译。 blade和TF-Serving版本、gcc版本之间都需要匹配,特别是bazel和TF-Serving之间匹配,不然经常因为各种原因装不上,这里列一下清单: 名称 版本 下载地址 TF-Serving r1.15 https://github.com/tensorflow/serving ...

Java的类加载过程 - 《Java核心技术》

Java类加载步骤 加载:将字节码数据从不同的数据源读取到JVM中,并映射为JVM认可的数据结构; 链接:把原始类定义信息平滑的转化入JVM,包括: 验证:验证字节信息是符合Java虚拟机规范的。 准备:创建类或接口中的静态变量,并初始化静态变量的初始值。 解析:将常量池中的符号引用替换为直接引用。 初始化:真正执行类初始化的代码逻辑,包括静态字段赋值、执行类定义中的静态初始化块内的逻辑。 双亲委派模型 简单来说就是当类加载器试图加载某个类型的时候, ...

K8s概述(三):最佳实践

如何配置pod pod的生命周期: Pending:etcd已经保存了Pod的状态,但是这个Pod还没有被scheduled,还没拉取image Running:Pod已经schedule到node上,kubelet已经创建了所有的容器 Succeeded:Pod中所有容器被终止,不再重启 Failed:Pod中所有容器被终止,至少有一个容器是因为失败而终止 Unknown:API server与Pod的通信中断,通常是因为与kubelet的通信中断 init ...

K8s概述(二):k8s组件选型

存储 使用 Volume是将宿主机目录与容器目录绑定挂载在一起。k8s把存储抽象为PV、PVC,把存储提供者与使用者分离。使用者只需要声明希望持有的持久化存储的属性(PVC),提供者提供可用的各种类型存储、节点、用户名密码等,提供PV。这样子的好处是使用者不需要关心底层是使用什么存储设备来实现的。 存储的选择 存储的选择:排除NFS,有单点问题,在GlusterFS和Ceph中做选择。根据网上找到的一篇文章以及本人自己dd后的测试结果,GlusterFS比Ceph略快一些: ...

K8s概述(一):几种集群方案的对比

几种集群方案简介 下面以docker部署为主,主流的容器化集群部署方案主要有以下几种: Docker Compose:帮助在同一个节点上部署多个容器。 Docker Swarm:多台机器上部署容器。开箱即用,快速部署容器。偏重容器部署 K8s:社区活跃度高,组件丰富。微服务化,偏重应用的部署。 Marathon+Mesos:大数据组件部署。 ...

K8s概述(前言)

卤煮之前在某厂商做toB项目的时候,需要去客户那里做私有化部署。一开始用的手工部署,多机部署要维护互联关系,还有各种词典、健康检查等都需要自己手动做,模块多起来之后简直就是灾难。后面上了整套k8s部署,大大的解放了生产力,把问题转移到了如何更好的使用k8s上面。 这里我对比一下跟物理机部署比起来,为什么我们要用k8s做私有化部署: 物理机、虚拟机部署 k8s容器化部署 创建一个AWS实例、或一台可用物理机 起一个容器 Puppet/ansible指明安装部署的二进制文件、 ...

Spring sidecar模式纳入TF-Serving(一):sidecar模式实验

前言 因为客服在线模块在线上要使用到tf-serving做在线推理,所以需要把C++模块集成进来。这一篇主要讲sidecar的实验部分,会起一个Django进程嵌入SpringCloud中做非JVM微服务来做实验。 起Eureka 在 https://start.spring.io/ 勾选Eureka Server Application加上EnableEurekaServer: @SpringBootApplication @EnableEurekaServer public class CloudApplication ...