java项目加载so/dll文件库
参考: https://stackoverflow.com/questions/1403788/java-lang-unsatisfiedlinkerror-no-dll-in-java-library-path https://www.cnblogs.com/eason-d/p/12401371.html 首先需要保证使用带有传统libc库的系统system.loadxxx的用法System.loadLibrary(“HelloWorld”);这句话是在执行java代码之前加载动态库System.load 参数必须为库文件的绝对全路径,可以是任意路径System.loadLibrary 参数为库文件名,不需要写库文件的扩展名, 注意:如果是linux系统库文件名需要以lib开头, 然后作为参数需要去掉lib例子(一般放在static代码块做加载,确保仅执行一次):1234567System.load("/user/src/app/lib/hello.dll"); // Load native library at runtimeSystem.loadLib...
利用fabric8结合git-hook动态配置k8s资源
背景 在多分支并行开发的集群下,新建分支以及删除分支都需要开发人员手动维护Istio/K8s的资源对象 目的 结合git hook -》 sync程序 -》 kubernetes API 流程,自动维护k8s以及istio资源对象,减少成本,提高开发效率 技术栈GitLab Api 使用GitLab Api,获取项目分支信息 123456 <!-- https://mvnrepository.com/artifact/org.gitlab/java-gitlab-api --><dependency> <groupId>org.gitlab</groupId> <artifactId>java-gitlab-api</artifactId> <version>${gitlab.version}</version></dependency> gitlab api认证 123456789101112131415161...
kafka生产调优
一、Kafka 硬件 配置选择1、场景说明 2、服务器台数选择 3、磁盘选择 4、内存选择Kafka 内存组成:堆内存 + 页缓存 1)Kafka 堆内存建议每个节点:10g ~ 15g 在 kafka-server-start.sh 中修改 123if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then export KAFKA_HEAP_OPTS="-Xmx10G -Xms10G"fi 查看 Kafka 进程号: 1234[atguigu@hadoop102 kafka]$ jps2321 Kafka5255 Jps1931 QuorumPeerMain 根据 Kafka 进程号,查看 Kafka 的 GC 情况: 1jstat -gc 2321 1s 10 新生代GC次数 根据 Kafka 进程号,查看 Kafka 的堆内存: 12345678910111213141516171819202122232425262728293031323334353637383940414243...
nginx-sticky安装及负载均衡使用
转自: https://blog.csdn.net/yyysylvia/article/details/80198021 sticky的工作原理Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route 客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。 后端服务器处理完请求,将响应数据返回给nginx。 此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值 客户端接收请求,并保存带route的cookie。 当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。 nginx+sticky安装nginx安装最好采用编译安装的方式,这样可以很方便的找到nginx的安装位置,方便添加nginx-sticky模块。如果之前已经编译安装过nginx,...
分析Alertmanager发送告警消息的逻辑
摘自: https://blog.csdn.net/qq_35952638/article/details/108077895 本文使用 Prometheus v2.18.1 ,Alertmanager v0.20.0本文主要分析 Alertmanager 什么情况下会发送告警消息,避免对用户造成消息轰炸。 Alertmanager 的一般工作流程 Prometheus 每隔 interval 时长执行一次 alert rule 。如果执行结果包含 n 个时间序列,则认为存在 n 个警报,通过 HTTP 通信发送 alerting 状态的消息给 Alertmanager 。 Alertmanager 收到之后, 先根据 route 判断它属于哪个 group 、应该发送给哪个 receiver 。 再判断该 group 当前是否处于冷却阶段、是否被 Silence 静音、是否被 Inhibit 抑制。如果都没有,则立即发送告警消息给用户。 如果 Prometheus 再次执行 alert rule 时,发现执行结果为空,则认为警报已解决,立即产生 resolved 状态的...
保证缓存数据库数据一致性
更新数据时的操作主要分为两种:写时更新和读时更新 什么是写时更新和读时更新写时更新:当我们往数据库写数据的时候我们去更新缓存,包括先更新缓存再更新数据库和先更新数据库再更新缓存。写时删除,读时更新:当我们往数据库写数据的时候我们直接删除缓存,然后其他请求读数据的时候更新缓存。包括先删除缓存再更新数据和先更新数据库再删除缓存。 缓存更新到底是读更新好还是写更新好?对比写时更新方案,读时更新更好,为什么? 如果你是一个写数据库场景比较多,而读数据场景比较少的业务需求,采用这种方案就会导致,数据压根还没读到,缓存就被频繁的更新,浪费性能。 同时有请求A和请求B进行更新操作,那么会出现 (1)线程A更新了数据库 (2)线程B更新了数据库 (3)线程B更新了缓存 (4)线程A更新了缓存。这就出现请求A更新缓存应该比请求B更新缓存早才对,但是因为网络等原因,B却比A更早更新了缓存。这就导致了脏数据,因此不考虑。 那么也就是说,如果是写更新的话,不管从性能的角度还是从线程安全的角度来说这种方案都不好。 读时更新有没有什么问题?前面我们说了,如果是写更新,会有效率和线程安全性的问题,那如...
vagrant+virtualbox
virtualbox下载地址:https://www.virtualbox.org/wiki/Downloads vagrant下载地址:https://developer.hashicorp.com/vagrant/downloads virtualbox安装添加box1vagrant box add --name centos/7 D:\HashiCorp\Vagrant\boxes\CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box 安装插件/配置环境变量(修改disksize需要)1234567# 解决centos7下使用synced_folder报错,https://stackoverflow.com/a/65545379/14936119vagrant plugin install vagrant-vbguest --plugin-version 0.21# 配合config.disksize.size使用(非必要,目前vagrant已支持实验参数node.vm.disk)# vagrant plugin inst...
Docker部署Jenkins以及更新版本
安装Jenkinsdocker-compose.yml 1234567891011121314151617181920212223version: '3.1'services: jenkins: restart: always image: jenkins/jenkins:2.395 container_name: jenkins user: root ports: # 发布端口 - 12012:8080 # 基于 JNLP 的 Jenkins 代理通过 TCP 端口 50000 与 Jenkins master 进行通信 #- 50000:50000 environment: - "TZ=Asia/Shanghai" - "PATH=$PATH:$HOME/bin:/var/local/apache-maven-3.6.3/bin" volumes: # jenkins clone下来的项目会在`/var/...
gitlab远程cicd
免密操控(或者使用sshpass工具,看下面)CI/CD实质是将我们手动集成、拷贝部署的方式脚本化,远程部署的重要姿势是要求免密操控。 要让Gitlab Runner部署到远程机器,远程机器必须信任gitlab runner账户。 ps: 免密操控不可以逆向, 就是说可以一个主控方, 多个被控方, 但不可以一个被控方,多个主控方 123经测试,是可以多个主控方,一个被控方的但是必须保证主控方ssh/scp过一次被控方机器然后其他的主控方ssh key就可以在被控方的`id_rsa.pub/authorized_keys`放置多组来实现`一被多主`,如下 先执行su gitlab-runner切换到gitlab-runner账户 在你的CI机器(主控端)上使用 ssh-keygen命令创建公钥,使用ssh-keygen -t rsa来创建,程序会问你存放目录,如果不需要修改,直接回车几次即可 将/.ssh目录下id_rsa.pub文件拷贝到受控机器的`/.ssh目录中,然后将文件内容导入到~/.ssh/authori...
docker-compose控制多个容器启动的优先级
docker-compose.yaml中healthcheck配置项作用:可用于检查容器是否正常运行,初始状态为starting,最后一次检查完成后显示sucess或者unhealthy,以下是命令执行返回的状态对应容器状态0:状态是sucess,容器正常运行1:状态是unhealthy,容器非正常运行2:忽略执行命令的状态包含healthcheck的docker-compose文件 12345678910111213141516171819202122version: "3.7" #docker compose的版本services: tomcat: image: tomcat:v10.0.7 ports: - 18080:8080 # 暴露端口信息 - "宿主机端口:容器暴露端口" container_name: tomcat_test #设置启动容器的名称,若不设置会默认生成一个 links: - mysql:db #指定关联的容器 mysql: image: ...
