locust学习
Locust学习
最近修复一个内存泄漏的bug ,低并发情况下很难复现 因此,在运维老哥的建议下,我学习了Locust 进行压力测试,以达到复现内存泄漏的问题
一、前言当我们做Web系统性能测试方案时,压力模拟工具的选择通常是一个绕不开的环节。对于大部分互联网公司的业务规模和测试资源投入,JMeter这个老牌开源性能测试工具能够满足大部分测试需求,它也可能是世面上书籍、博客教程丰富程度仅次于LoadRunner的性能测试工具。然而当我们的场景需要模拟的并发用户数以千为单位时,使用JMeter的成本越来越大,甚至超出我们掌握的资源。此时,我们开始寻找更低成本的方案,而Locust,为这样的方案带来了一种可能。
Locust是开源、使用Python开发、基于事件、支持分布式并且提供Web Ul进行测试执行和结果展示的性能测试工具。而它之所以能够在资源占用方面明显优于JMeter,一个关键点在于两者模拟虚拟用户的方式不同,JMeter通过线程来作为虚拟用户,而Locust借助gevent库对协程的支持,以greenlet来实现对用户的模拟,相同配置下Locust能支持的并发用户数相比JMe ...
操作系统
操作系统
第一章、引论操作系统的主要功能
处理机的管理
储存器的管理
设备管理
文件管理
接口管理
操作系统的特征
并发: 两个或多个事件在同一事件间隔内发生
共享: 系统中的资源可供内存中多个并发执行的进程共同使用
虚拟:把一个物理上的实体变成若干个物理上的对应物
异步:在多道程序的环境下 运行程序走走停停,以不可知的速度向前推进
操作系统在计算机系统中处于计算机硬件和用户之间的位置
操作系统的基本类型有实时操作系统 批处理操作系统以及分时操作系统
实时操作系统:
优先处理紧急事务,实时性、可靠性
批处理操作系统:
多道批处理并发执行,提高资源利用率
分时操作系统:
允许用户与计算机直接交互
第二章 、进程的描述与控制
进程 :动态的程序的一次执行过程
[进程创建, 创建原语].(1)过程:① 为新进程分配一个唯一的进程标识号,并申请一个空白的 PCB.若 PCB 申请失败,则进程创建失败②为进程分配运行所需的资源,如内存、文件、I/O设备、CPU 时间等,这些资源或从 Os 获得,或从父进程获得.若资源不足,则处于创建态,等待内存资源③ ...
Docker学习
Docker学习Docker 是一个应用打包、分发、部署的工具你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要,而普通虚拟机则是一个完整而庞大的系统,包含各种不管你要不要的软件。
打包、分发、部署打包:就是把你软件运行所需的依赖、第三方库、软件打包到一起,变成一个安装包分发:你可以把你打包好的“安装包”上传到一个镜像仓库,其他人可以非常方便的获取和安装部署:拿着“安装包”就可以一个命令运行起来你的应用,自动模拟出一摸一样的运行环境,不管是在 Windows/Mac/Linux。
重要概念:镜像、容器镜像:可以理解为软件安装包,可以方便的进行传播和安装。容器:软件安装后的状态,每个软件运行环境都是独立的、隔离的,称之为容器。
Docker 命令镜像1234567891011121314151617181920212223242526272829docker images #查看镜像#从服务器拉取镜像拉取镜像docker pull 镜像名 #拉取最新版本的镜像docker pull 镜像名:tag #拉取镜像,指定版 ...
Golang学习
Golang速成
golang里的main函数必须要导入package main
1package main
导包1234import( "fmt" "time")
函数 函数的{ 一定是 和函数名在同一行的,否则编译错误
golang中的表达式,加”;”,和不加 都可以,建议是不加
12345func(){ fmt.println("hello Go!") time.sleep(1*time.Second)}
变量的声明方式12345678910111213141516func main(){//方法-:声明一个变量 默认的值是0var a intfmt.Println("a=",a)fmt.Printf("type ofa=&T\n",a)//方法二:声明一个变量,初始化一个值var b int = 100fmt.Printin("b =",b)fmt.Printf("type of b=&am ...
redis学习
Redis学习
什么是 Redis?Redis 是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于缓存,消息队列、分布式锁等场景Redis 提供了多种数据类型来支持不同的业务场景,比如 String(字符串)、Hash(哈希)、 List (列表)、Set(集合)、Zset(有序集合)、Bitmaps(位图)、HyperLogLog(基数统计)、GEO(地理信息)、Stream(流),并且对数据类型的操作都是原子性的,因为执行命令由单线程负责的,不存在并发竞争的问题。除此之外,Redis 还支持事务 、持久化、Lua 脚本、多种集群方案(主从复制模式、哨兵模式、切片机群模式)、发布/订阅模式,内存淘汰机制、过期删除机制等等。
为什么用 Redis 作为 MySQL 的缓存?主要是因为 Redis 具备「高性能」和「高并发」两种特性。
1、Redis 具备高性能
假如用户第一次访问 MySQL 中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据缓存在 Redis 中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了, ...
Langchain学习
Langchain学习
LangChain是一个框架,用于开发由大型语言模型(LLM)驱动的应用程序。
LangChain 简化了 LLM 应用程序生命周期的每个阶段:
开发:使用LangChain的开源构建块和组件构建应用程序。使用第三方集成和模板开始运行。
生产化:使用 LangSmith 检查、监控和评估您的链条,以便您可以自信地持续优化和部署。
部署:使用 LangServe 将任何链转换为 API。
LLM 支持的最强大的应用程序之一是复杂的问答 (Q&A) 聊天机器人。这些应用程序可以回答有关特定源信息的问题。这些应用程序使用一种称为检索增强生成 (RAG) 的技术。
什么是RAG?RAG 是一种使用额外数据增强 LLM 知识的技术。
LLM 可以对广泛的主题进行推理,但他们的知识仅限于他们接受培训的特定时间点之前的公共数据。如果要构建可以推理私有数据或模型截止日期后引入的数据的 AI 应用程序,则需要使用模型所需的特定信息来增强模型的知识。引入适当信息并将其插入模型提示符的过程称为检索增强生成 (RAG)。
LangChain有许多组件,旨在帮助构建Q& ...
向量数据库
向量数据库学习什么是向量数据库向量嵌入是从机器学习模型派生的数值表示,封装了非结构化数据的语义含义。这些嵌入是通过神经网络或转换器架构分析数据中的复杂相关性而生成的,从而创建一个密集的向量空间,其中每个点都对应于数据对象的“含义”,例如文档中的单词。
这个过程将文本或其他非结构化数据转换为反映语义相似性的向量——具有相关含义的单词在这个多维空间中的位置更近,从而促进了一种称为“密集向量搜索”的搜索。这与传统的关键字搜索形成鲜明对比,后者依赖于精确匹配并使用稀疏向量。向量嵌入的发展,通常源于主要科技公司广泛训练的基础模型,允许更细致的搜索,捕捉数据的本质,超越词汇或稀疏向量搜索方法的限制。
矢量嵌入可用于各种应用,以各种方式提高效率和准确性。以下是一些最常见的用例:
查找相似的图像、视频或音频文件矢量嵌入支持通过卷积神经网络 (CNN) 分析图像、视频帧或音频片段,按内容而不仅仅是关键字搜索相似的多媒体内容。这允许进行高级搜索,例如通过比较存储在矢量数据库中的嵌入式表示,根据声音提示或通过图像查询查找视频。
通过语义搜索提高搜索相关性通过将内部文档嵌入到向量中,组织可以利用语义搜索 ...
Kafka学习
Kafka学习
一、Kafka 简介Kafka 是一个消息系统,原本开发自 LinkedIn,用作 LinkedIn 的活动流(Activity Stream)和运营数据处理管道(Pipeline)的基础。现在它已被多家不同类型的公司 作为多种类型的数据管道和消息系统使用。
Kafka 是一种分布式的,基于发布 / 订阅的消息系统。主要设计目标如下:
以时间复杂度为 O(1) 的方式提供消息持久化能力,即使对 TB 级以上数据也能保证常数时间复杂度的访问性能。
高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒 100K 条以上消息的传输。
支持 Kafka Server 间的消息分区,及分布式消费,同时保证每个 Partition 内的消息顺序传输。
同时支持离线数据处理和实时数据处理。
Scale out:支持在线水平扩展。
假如你是一个程序员,假设你维护了两个服务 A 和 B。B 服务每秒只能处理 100 个消息,但 A 服务却每秒发出 200 个消息,B 服务哪里顶得住,分分钟被压垮。那么问题就来了,有没有办法让 B 在不被压垮的同时,还能处理掉 A 的消息 ...
pandas学习
pandas学习笔记Seriesserirs的创建12345678910111213import pandas as pdpd.Series(np)传入一个可迭代对象可以指定index作为键值#可以传入字典来创建 Series>>> d = {'a': 1, 'b': 2, 'c': 3}>>> ser = pd.Series(data=d, index=['a', 'b', 'c'])>>> sera 1b 2c 3dtype: int64
切片和索引与字典一样 Series可以通过index来查找对应的值
12345678d = {'name': "xiaoming", 'age': 18, 'tel': 1008010}t3 = pd.Series(d)print(t3[ ...