如何快速收录一个网站的信息创意设计生活用品
- 作者: 五速梦信息网
- 时间: 2026年03月21日 09:50
当前位置: 首页 > news >正文
如何快速收录一个网站的信息,创意设计生活用品,兰州新区城乡建设局网站,如何设置网站标题文章目录 Pre引言#xff1a;为何提前暴露指标与分析的重要性指标暴露与监控接入Prometheus 集成 性能剖析工具#xff1a;火焰图与 async-profilerasync-profiler 下载与使用结合 Flame 图优化示例 HTTP 及 Web 层优化CDN 与静态资源加速Cache-Control/Expires 在 Nginx 中配… 文章目录 Pre引言为何提前暴露指标与分析的重要性指标暴露与监控接入Prometheus 集成 性能剖析工具火焰图与 async-profilerasync-profiler 下载与使用结合 Flame 图优化示例 HTTP 及 Web 层优化CDN 与静态资源加速Cache-Control/Expires 在 Nginx 中配置示例减少域名数量Gzip 及资源压缩配置Keep-Alive 配置 SpringBoot 容器调优自定义嵌入式 Tomcat替换 UndertowJVM 参数回顾 应用性能监控与分布式追踪SkyWalking 集成 各层优化思路Controller 层Service 层传统事务 vs 柔性事务 DAO 层缓存优化资源与线程管理端到端测试与压测 小结 Pre 性能优化 - 理论篇常见指标及切入点 性能优化 - 理论篇性能优化的七类技术手段 性能优化 - 理论篇CPU、内存、I/O诊断手段 性能优化 - 工具篇常用的性能测试工具 性能优化 - 工具篇基准测试 JMH 性能优化 - 案例篇缓冲区 性能优化 - 案例篇缓存 性能优化 - 案例篇数据一致性 性能优化 - 案例篇池化对象_Commons Pool 2.0通用对象池框架 性能优化 - 案例篇大对象的优化 性能优化 - 案例篇使用设计模式优化性能 性能优化 - 案例篇并行计算 性能优化 - 案例篇多线程锁的优化 性能优化 - 案例篇CAS、乐观锁、分布式锁和无锁 性能优化 - 案例篇 详解 BIO NIO AIO 性能优化 - 案例篇 19 条常见的 Java 代码优化法则 性能优化 - 案例篇JVM垃圾回收器 性能优化 - 案例篇JIT 性能优化 - 案例篇11种优化接口性能的通用方案 性能优化 - 高级进阶JVM 常见优化参数 引言为何提前暴露指标与分析的重要性 在正式进行性能优化之前必须先“看得到”系统运行状况缓存命中率、数据库连接池使用情况、响应时长分布、CPU/内存消耗、垃圾回收停顿等。只有掌握真实数据才能有针对性地优化盲目调整往往事倍功半甚至适得其反。 指标暴露与监控接入 Prometheus 集成 Maven 依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId /dependency dependencygroupIdio.micrometer/groupIdartifactIdmicrometer-core/artifactId /dependency dependencygroupIdio.micrometer/groupIdartifactIdmicrometer-registry-prometheus/artifactId /dependencyapplication.properties / application.yml 配置 management.endpoint.metrics.enabledtrue management.endpoint.prometheus.enabledtrue management.endpoints.web.exposure.includehealth,info,prometheus,metrics management.metrics.export.prometheus.enabledtrue management.endpoint.health.show-detailsalways
可根据需要开放其他端点如 httptrace、threaddump启动与访问 启动后访问 http://host:port/actuator/prometheus 可看到所有默认与自定义指标。 配置 Prometheus server 抓取该 endpoint例如在 prometheus.yml: scrape_configs:- job_name: springboot-appmetrics_path: /actuator/prometheusstatic_configs:- targets: [app-host:port]自定义业务指标示例 RestController
public class TestController {private final MeterRegistry registry;public TestController(MeterRegistry registry) {this.registry registry;}GetMapping(/test)public String test() {registry.counter(app_test_invocations, from, 127.0.0.1, method, test).increment();return ok;}
}在 Prometheus 中可见指标如 app_test_invocations_total{from127.0.0.1,methodtest} 5.0 对于缓存命中率可在缓存拦截或 CacheManager 事件中注册 Counter/Gauge例如 CacheObject, Object cache …; // 若使用 Caffeine可 attach 监听
// 当命中时 registry.counter(cache_hit, cache, myCache).increment();
// 当未命中时 registry.counter(cache_miss, cache, myCache).increment();Grafana 可视化与 AlertManager 在 Grafana 中配置 Prometheus 数据源创建 Dashboard 展示 JVM 内存、GC 停顿、线程数HTTP 请求速率、延迟分布可借助 Histogram/Summary缓存命中率hit/(hitmiss)数据库连接池使用率活跃连接数 vs 最大连接数 AlertManager 配置告警规则例如 95% 延迟超过阈值GC 停顿时长过长连接池耗尽告警 此部分可参考 Prometheus 与 Grafana 官方文档自行搭建实验环境。 性能剖析工具火焰图与 async-profiler
async-profiler 下载与使用 从 GitHub 下载 async-profiler release 包解压至服务器目录如 /opt/async-profiler。 启动 SpringBoot 应用时添加 javaagent 参数 java -agentpath:/opt/async-profiler/build/libasyncProfiler.sostart,svg,fileprofile.svg -jar your-app.jar运行一段业务场景压测或真实流量然后停止进程或通过 async-profiler 提供的 CLI 停止采样 # 若不想重启可 attach 模式
./profiler.sh -d 30 -f profile.svg pid查看生成的 profile.svg用浏览器打开 横轴表示消耗的采样比例宽度越大表示更耗时的方法。纵向为调用栈层级。从最宽处逐层向下分析找到热点方法结合源代码定位优化点。
结合 Flame 图优化示例
若热点在某个慢方法可查看方法内部逻辑是否存在不必要的循环、I/O 阻塞或可并行优化。若热点在序列化/反序列化可考虑更高效的库或减小返回对象结构。若大量时间在 GC可结合 GC 日志分析堆配置是否合理。 HTTP 及 Web 层优化 CDN 与静态资源加速
将常用静态资源JS、CSS、图片托管于 CDN减轻后端压力用户访问时由地理就近节点提供。对第三方库可使用公共 CDN自有资源可上传到 CDN 或静态文件服务器。
Cache-Control/Expires 在 Nginx 中配置示例
location ~* .(ico|gif|jpg|jpeg|png|css|js)$ {add_header Cache-Control max-age31536000, immutable;
}根据资源更新策略设置版本号或文件指纹保证缓存命中又可及时更新。
减少域名数量
将静态资源和 API 接口合理合并域名避免过多不同子域导致 DNS 查询延迟。可启用 HTTP/2 时多路复用可减少域名依赖但 HTTP/2 支持需服务器和客户端皆启用。
Gzip 及资源压缩配置
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_types text/plain application/javascript text/css application/json;确保对动态 JSON 接口开启 gzip减小响应体体积。对大型静态文件可在构建时先行压缩如 Brotli结合 Nginx 支持。
Keep-Alive 配置 客户端与 Nginx http {keepalive_timeout 60s 60s;keepalive_requests 10000;
}Nginx 与 SpringBoot 后端长连接 location / {proxy_pass http://backend;proxy_http_version 1.1;proxy_set_header Connection ;
}SpringBoot/Tomcat 默认支持 Keep-Alive可通过自定义 Connector 调整超时。
SpringBoot 容器调优
自定义嵌入式 Tomcat
如果项目并发量比较高想要修改最大线程数、最大连接数等配置信息可以通过自定义Web 容器的方式代码如下所示。
SpringBootApplication(proxyBeanMethods false)
public class App implements WebServerFactoryCustomizerConfigurableServletWebServerFactory {public static void main(String[] args) {SpringApplication.run(App.class, args);}Overridepublic void customize(ConfigurableServletWebServerFactory factory) {if (factory instanceof TomcatServletWebServerFactory) {TomcatServletWebServerFactory f (TomcatServletWebServerFactory) factory;f.setProtocol(org.apache.coyote.http11.Http11Nio2Protocol);f.addConnectorCustomizers(c - {Http11NioProtocol protocol (Http11NioProtocol) c.getProtocolHandler();protocol.setMaxConnections(200);protocol.setMaxThreads(200);protocol.setConnectionTimeout(30000);// protocol.setSelectorTimeout(3000); // NIO2 可选项});}}
}设置协议为 NIO2 可在高并发 I/O 场景下提升性能需基准测试验证。setMaxThreads 和 setMaxConnections 值根据服务器硬件资源与业务并发调整可在压测环境多次尝试并观察响应延迟、CPU 利用率、线程使用情况。 替换 Undertow 在 pom.xml 中排除 Tomcat 并引入 Undertow dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactIdexclusionsexclusiongroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-tomcat/artifactId/exclusion/exclusions
/dependency
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-undertow/artifactId
/dependencyUndertow 线程模型和资源占用一般较轻需要在业务场景中压测对比。 注意部分 Tomcat 特有配置不适用需调整监控指标对应项。
JVM 参数回顾 结合性能优化 - 高级进阶JVM 常见优化参数 可启动时传入 -XX:UseG1GC -Xms2048m -Xmx2048m -XX:AlwaysPreTouch -XX:MaxMetaspaceSize256m -XX:ReservedCodeCacheSize240m -XX:MaxDirectMemorySize512m
-XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/path/to/dumps -XX:ErrorFile/path/to/hs_err_pid%p.log
-Xlog:gc*,gcagetrace,safepoint:filelogs/gc.log:utctime,pid,tags:filecount5,filesize100m根据硬件和应用特点调整堆大小若GC停顿问题突出可结合 async-profiler 和 GC 日志深入分析。 应用性能监控与分布式追踪
SkyWalking 集成 下载与部署 下载 SkyWalking Agent 和后端服务按存储类型如 Elasticsearch 存储版。部署 SkyWalking 后端配置 Storage、UI、Collector。 启动应用时添加 Agent java -javaagent:/opt/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_nameyour-service-name -Dskywalking.collector.backend_servicecollector-host:11800 -jar your-app.jar查看调用链与指标 访问 SkyWalking UI可看到每次请求的调用链图、各段耗时、数据库/HTTP 调用详情、JVM 指标、GC 指标。结合 Prometheus 等指标综合判断若某接口响应慢可查看是哪一段查询、序列化、远程调用等成为瓶颈。 报警与自动化 可结合 SkyWalking 的告警和 Prometheus AlertManager 设置阈值告警。定期分析热点接口和突发异常请求流制定优化计划。
各层优化思路
Controller 层
DTO 精简与分页避免一次性返回过大结果集对列表数据使用分页或流式方式如 Spring MVC StreamingResponseBody。JSON 序列化优化选择高性能序列化库Jackson 已较快可开启 Afterburner 模块避免将不必要字段序列化。输入校验与限流对异常或恶意请求提前拦截减少无效处理。幂等性与缓存对可缓存接口如 GET 查询结合 HTTP 缓存头或后端缓存减少重复计算。
Service 层 无状态设计Service Bean 默认单例无状态避免在 Bean 中维护请求级状态。 合理拆分与职责分离将复杂逻辑拆成小模块便于监控与优化。 异步与并行对于可并行处理的子任务可使用 CompletableFuture、异步消息队列等但要注意线程池配置与上下文传递。 缓存策略 本地缓存Caffeine低延迟、减轻远程调用压力监控命中率避免缓存污染。分布式缓存Redis适用于共享场景注意 TTL 策略、防止缓存穿透布隆过滤、请求预热、防止雪崩加随机过期、防止击穿互斥锁或预加载。 避免重复计算与请求合并对重复请求可合并或去重减少下游压力。 分布式事务讨论 两阶段提交、TCC、本地消息表、MQ事务消息等方案都会增加延迟与资源占用仅在必要场景使用。 优先考虑补偿事务与柔性事务实现最终一致性通过幂等设计与补偿逻辑将风险和性能开销控制在可接受范围内。
如上图分布式事务要在改造成本、性能、时效等方面进行综合考虑。有一个介于分布式事务和非事务之间的名词叫作柔性事务。柔性事务的理念是将业务逻辑和互斥操作从资源层上移至业务层面。
传统事务 vs 柔性事务
关于传统事务和柔性事务我们来简单比较一下。 ACID 关系数据库, 最大的特点就是事务处理, 即满足 ACID。 原子性Atomicity事务中的操作要么都做要么都不做。 一致性Consistency系统必须始终处在强一致状态下。 隔离性Isolation一个事务的执行不能被其他事务所干扰。 持久性Durability一个已提交的事务对数据库中数据的改变是永久性的。 BASE BASE 方法通过牺牲一致性和孤立性来提高可用性和系统性能。
BASE 为 Basically Available、Soft-state、Eventually consistent 三者的缩写其中 BASE 分别代表 基本可用Basically Available系统能够基本运行、一直提供服务。 软状态Soft-state系统不要求一直保持强一致状态。 最终一致性Eventual consistency系统需要在某一时刻后达到一致性要求。
互联网业务推荐使用补偿事务完成最终一致性。比如通过一系列的定时任务完成对数据的修复。 DAO 层 ORM 使用注意 懒加载原则避免无意触发大量关联查询合理使用 FetchType.LAZY并在Service层通过显式查询或 DTO 投影避免 N1。批量操作对于大量写场景使用批量插入/更新。 SQL 优化与索引分析慢查询日志、使用 EXPLAIN 确认索引命中避免全表扫描。 分库分表注意理解中间件实现原理避免误以为简单 SQL 实现即高效关注路由开销与合并成本。 数据库连接池 HikariCP 默认已非常高效但仍需监控活跃连接数、等待时长根据业务并发调整最大连接数避免连接池耗尽或空闲过多浪费资源。在 Prometheus 中可通过 HikariPool 指标收集连接使用情况适时调整。
缓存优化 Caffeine适合本地缓存低延迟需监控缓存大小、命中率、加载延迟避免过大导致内存占用过高。 Redis 连接池配置监控和调整 Lettuce/Redisson 连接数注意阻塞或过度并发导致连接耗尽。数据序列化选择高效序列化方式如 JSON、Kryo、FST 等兼顾可读性与性能。缓存策略参见上文防护策略结合业务场景设计合理 TTL。 二级缓存对数据库读密集应用可考虑本地分布式二级缓存架构注意缓存一致性。
资源与线程管理 线程池配置 对于异步任务、自定义 Executor设置合适的 core/max pool size、queue size监控线程活跃度、队列长度防止任务堆积。对于定时任务避免过多定时线程争抢资源。 非阻塞与异步 若业务适合可使用 WebFlux 或 Reactor但需慎重考虑团队熟悉度与实际场景异步场景要注意线程切换开销和上下文传递。对外 HTTP 调用可使用异步 HTTP 客户端如 WebClient避免阻塞线程。
端到端测试与压测
压测工具wrk、JMeter、Locust 等测前准备确保监控、日志、profiling 准备完毕在测试环境部署与生产相近的架构。测试脚本设计模拟真实业务流量包括登录、查询、写入等混合场景。结果分析结合 Prometheus/Grafana 监控数据和火焰图找出瓶颈反复调优并回归测试评估改动效果。负载模型考虑渐增负载测试、稳定性测试、持久压力测试观察资源消耗与响应曲线。 小结
指标采集—剖析—优化—验证是闭环流程始终保持对系统可观测性。渐进式改动在非生产环境验证避免一次性大改带来风险生产环境小步部署与监控回滚准备。CI/CD 集成可在持续集成/部署流程中集成简单的健康检查和性能基准测试。定期回顾定时检查关键接口的性能指标防止代码或依赖升级带来性能回退。团队协作文档化优化经验分享给团队成员形成共识和规范。
相关文章
-
如何快速建设网站企业网站设计中应注意产品发布功能优化
如何快速建设网站企业网站设计中应注意产品发布功能优化
- 技术栈
- 2026年03月21日
-
如何快速搭建网站美食网站模版
如何快速搭建网站美食网站模版
- 技术栈
- 2026年03月21日
-
如何看一个网站做的如何一个主体可以备案几个网站
如何看一个网站做的如何一个主体可以备案几个网站
- 技术栈
- 2026年03月21日
-
如何来构建一个成交型网站网站做某个关键词排名该怎么做
如何来构建一个成交型网站网站做某个关键词排名该怎么做
- 技术栈
- 2026年03月21日
-
如何利用电商平台推广网站推广优化平台
如何利用电商平台推广网站推广优化平台
- 技术栈
- 2026年03月21日
-
如何利用网站做淘宝联盟想开网店不知道怎么开
如何利用网站做淘宝联盟想开网店不知道怎么开
- 技术栈
- 2026年03月21日






