轻量级

轻量级性能测试工具wrk - 使用(实战篇)

拜拜、爱过 提交于 2020-03-02 18:43:45
一、发送POST请求例子 wrk压力测试POST请求--以本地项目地址为例:http://192.168.180.126 登录接口:/api/user/login/ 请求数据: { "username":"admin", "password":"admin123456", "code":666 } 1.编写lua脚本,填写post的数据,如login.lua wrk.method = "POST" wrk.body = '{"username":"admin","password":"admin123456","code":666}' wrk.headers["Content-Type"] = "application/json" function request() return wrk.format("POST",nil,nil,body) end function response(status, headers, body) if status ~= 200 then print(body) wrk.thread:stop() end end 2.执行wrk,开始压力测试。 wrk -t 16 -c 100 -d 30s --latency --timeout 5s -s login.lua http://192.168.180.126/api/user/login/

轻量级协程库-C语言实现

混江龙づ霸主 提交于 2020-03-02 03:23:41
协程(coroutine)顾名思义就是“协作的例程”(co-operative routines)。跟具有操作系统概念的线程不一样,协程是在用户空间利用程序语言的语法语义就能实现逻辑上类似多任务的编程技巧。实际上协程的概念比线程还要早,按照 Knuth 的说法 “子例程是协程的特例” ,一个子例程就是一次子函数调用,那么实际上协程就是类函数一样的程序组件,你可以在一个线程里面轻松创建数十万个协程,就像数十万次函数调用一样。只不过子例程只有一个调用入口起始点,返回之后就结束了,而协程入口既可以是起始点,又可以从上一个返回点继续执行,也就是说协程之间可以通过 yield 方式转移执行权, 对称(symmetric)、平级 地调用对方,而不是像例程那样上下级调用关系。当然 Knuth 的“特例”指的是协程也可以模拟例程那样实现上下级调用关系,这就叫 非对称协程 (asymmetric coroutines)。 基于事件驱动模型 我们举一个例子来看看一种 对称协程 调用场景,大家最熟悉的“生产者-消费者”事件驱动模型,一个协程负责生产产品并将它们加入队列,另一个负责从队列中取出产品并使用它。为了提高效率,你想一次增加或删除多个产品。伪代码可以是这样的: 1 2 3 4 5 6 7 8 9 10 11 12 13 # producer coroutine loop while queue

多线程进阶——JUC并发编程之Synchronized底层实现概论🔥

 ̄綄美尐妖づ 提交于 2020-03-02 01:07:17
1、Synchronized简介 Java中提供了两种实现同步的基础语义: synchronized 方法和 synchronized 块 ,下面我们来操作一番: public class SyncTest { public void syncBlock(){ synchronized (this){ System.out.println("sync block balabala...."); } } public synchronized void syncMethod(){ System.out.println("sync method hahaha...."); } public static void main(String[] args) { } } 将SyncTest.java 编译为SyncTest,.class文件,我们使用 javap -v SyncTest.class 查看class文件对应的JVM字节码信息。这里我使用的是JVM版本是JDK1.8。 { ... public void syncBlock(); descriptor: ()V flags: ACC_PUBLIC Code: stack=2, locals=3, args_size=1 0: aload_0 1: dup 2: astore_1 3: monitorenter 4:

轻量级应用服务器tomcat详解(一)tomcat的安装+Ningx+tomcat实现负载均衡

岁酱吖の 提交于 2020-03-01 19:12:46
文章目录 tomcat简介 tomcat的安装 nginx实现tomcat的负载均衡 tomcat简介 Tomcat 服务器是一个 免费的开放源代码 的Web 应用服务器,属于 轻量级应用服务器 ,在 中小型系统和并发访问用户不是很多 的场合下被普遍使用,是 开发和调试JSP 程序的首选 。 对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以 当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的 。 当配置正确时,Apache 为HTML页面服务,而 Tomcat 实际上运行JSP 页面和Servlet 。另外,Tomcat和IIS等Web服务器一样,具有 处理HTML页面的功能,另外它还是一个Servlet和JSP容器 ,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。 tomcat的安装 在serevr2 172.25.2.11 中 关闭防火墙和selinux 1.从官网获得所需安装包 2.解压java运行时环境,jdk包到/usr/local/ 解压tomcat包到/usr/local 3.创建软连接 注意:

轻量级应用服务器tomcat详解(二)如何实现会话保持连接

回眸只為那壹抹淺笑 提交于 2020-03-01 18:59:21
文章目录 会话保持是什么 cookie和session是什么 实现步骤 会话保持是什么 会话保持是指在 负载均衡器上的一种机制 ,可以识别客户端与服务器之间交互过程的关连性, 在作负载均衡的同时还保证一系列相关连的访问请求都会分配到一台机器上。 即 在一次会话过程中发起的多个请求都会落到同一台机器上 。 cookie和session是什么 把用户的数据交给流动的客户端(浏览器)来保存,是不安全,不可靠的。 实现步骤 实验背景 172.25 .2 .10 server1 nginx反向代理 172.25 .2 .11 serevr2 tomcat服务器 1 172.25 .2 .254 server3 tomcat服务器 3 172.25 .2 .2 真机 测试机 关闭它们的防护墙 selinux 1.将serevr2和server3中的tomcat的默认发布目录里写上test.jsp测试文件,这里以serevr2为例,serevr3的做法相同 2.在真机浏览器测试时,nginx实现轮询,页面的内容是每个主机的信息 此时session是无法保存的,每次刷新都会有一个新的session 在serevr1上,使同一个用户的请求会掉到同一个服务器,session请求也不会变 测试 新的问题: 如何实现session保持 在server2上 只保留一个就够了 编辑此文件,实现交叉存储

偏向锁、轻量级锁、重量级锁区别与联系

百般思念 提交于 2020-03-01 05:53:55
今天总结了锁升级(偏向锁、轻量级锁、重量级锁)和锁优化下面开始总结。 其实这些内容都是JVM对锁进行的一些优化,为什么分开讲,原因是锁升级比较重要,也比较难。 一、锁升级 在1.6之前java中不存在只存在重量级锁,这种锁直接对接底层操作系统中的互斥量(mutex),这种同步成本非常高,包括操作系统调用引起的内核态与用户态之间的切换。线程阻塞造成的线程切换等。因此在jdk 1.6中将锁分为四种状态:由低到高分别为:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态。 1. 偏向锁。什么是偏向锁呢?为什么要引入偏向锁呢? 偏向锁是如果一个线程获取到了偏向锁,在没有其他线程竞争的情况下,如果下次再执行该同步块时则只需要简单判断当前偏向锁所偏向的对象是否是当前线程,如果是则不需要再进行任何获取锁与释放锁的过程,直接执行同步块。至于为什么引入偏向锁,是因为经过JVM的开发人员大量的研究发现大多数时候都是不存在锁竞争的,通常都是一个线程在使用锁的时候没有其他线程来竞争,然而每次都要进行加锁和解锁就会额外增加一些没有必要的资源浪费。为了降低这些浪费,JVM引入了偏向锁。 a) 偏向锁的获取以及升级过程如下: 当一个线程在执行同步块时,它会先获取该对象头的MarkWord,通过MarkWord来判断当前虚拟机是否支持偏向锁(因为偏向锁是可以手动关闭的),如果不支持则直接进入轻量级锁获取过程

2016年31款轻量高效的开源JavaScript插件和库

冷暖自知 提交于 2020-02-29 05:30:29
目前有很多网站设计师和开发者喜欢使用由JavaScript开发的插件和库,但同时面临一个苦恼的问题:它们中的大多数实在是太累赘而且常常降低网站的性能。其实,其中也有不少轻量级的插件和库,它们不仅轻巧有用,而且不会影响网站的性能。本文就为大家整理了2016年以来30多款轻量级Javascript插件和库的列表,这些工具服务于特定的目标,并且它们能够非常有效和高效地实现目标。 不管你想创建一个图片库、一个滑动效果,个性化菜单还是其他接口元素,你都可以用这些插件和库轻易的实现。同时,你还可以使用这些插件为网站增加出色的功能,例如GIF和图片预览、吸引人的网站图标及其他。 这些插件和库都是非常简单的编码并且可以轻易实现。你以后肯定会发现它们对于你的Web项目非常有用。 0、 baguetteBox.js baguetteBox.js是一个简单易用的响应式图像灯箱效果脚本,而且在移动设备上支持滑动手势,完全使用Javascript编写。(压缩后大约2.7KB) DEMO: https://feimosi.github.io/baguetteBox.js/ 1、 ScrollReveal ScrollReveal插件使用户能够无比轻松地创建桌面和移动浏览器的网页滚动动画(压缩后大约3.3KB) 请各位自行打开DEMO页面感受一下动画效果。:) DEMO: https:/

docker-compose 创建轻量级git服务——gitea

烂漫一生 提交于 2020-02-28 17:23:27
docker-compose.yml version: '2' services: web: image: gitea/gitea:1.6 container_name: gitea_web hostname: gitea.trio.ai environment: - USER_UID=1000 - USER_GID=1000 - DB_TYPE=mysql - DB_HOST=db:3306 - DB_NAME=gitea - DB_USER=gitea - DB_PASSWD=password - RUN_MODE=prod - LANGS=zh-CN networks: - gitea volumes: - data:/data - /etc/localtime:/etc/localtime ports: - "3000:3000" - "3022:22" depends_on: - db restart: always db: image: mysql:5.7 container_name: gitea_db restart: always environment: - MYSQL_ROOT_PASSWORD=password - MYSQL_USER=gitea - MYSQL_PASSWORD=password - MYSQL_DATABASE=gitea

微服务和微服务架构

跟風遠走 提交于 2020-02-28 13:04:06
微服务 强调的是服务的大小,它关注的是某一个点,是具体解决某一问题/提供落地对应服务的一个服务应用, 狭义的看,可以看做Eclipse里面的一个个微服务工程/Module 微服务架构 微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务,服务之间相互协调,互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务之间采用轻量级的通信机制互相协作(HTTPPAII的RESTfull),每个服务都围绕着具体业务进行构建,并且能够独立的部署到生产环境,类生产环境等,另外,应避免统一的,集中式的服务管理机制,对具体的服务而言,应根据业务上下文,选择合适的语言、工具进行构建 本文参考资料: 尚硅谷周阳Spring Cloud讲解和翻译 , 业界大牛 马丁.福勒(Martin Fowler)发布的论文 本文若有错误请指正,互相学习,加油! 来源: CSDN 作者: 小小辉先生 链接: https://blog.csdn.net/Modesty_Boy/article/details/104551301

Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库上下文

流过昼夜 提交于 2020-02-28 04:56:36
导航 目 录: Farseer.net轻量级ORM开源框架 目录 上一篇: Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置文件 下一篇: Farseer.net轻量级ORM开源框架 V1.x 入门篇:表实体类映射 前言   上文讲述了数据库配置使用,搭建好数据库的链接方式了我们知道怎么做了。   事实上,至今我们仍然还没有讲到代码方面,花了前面这么多篇幅讲解,主要是想由浅入深,不然一上来给大家讲解这讲解那的,听的也一头雾水,反而得不到效果。   这篇比较重要,因为它是我们在使用Farseer.Net时最基础的类: DbContext (与EntityFramework的DbContext一个概念) 数据库上下文   从字面上,我们就知道:它是我们程序(业务)与数据库之间的沟通桥梁,在对表(实体类)进行CURD时,需要让实体类知道,我需要访问哪种数据库。   而数据库上下文,就是告诉我们的实体类,应该对哪个数据库类型进行连接访问。   在Farsser.Net里,数据库上下文对应的类便是: DbContext , 这便是需要我们继承它,然后在这个类里面,封装我们需要的实体类的属性。 构造函数 /// <summary> /// 通过数据库配置,连接数据库 /// </summary> /// <param name="dbIndex">数据库选项<