profile-blocking — community profile-blocking, varun.surf, community, ide skills

v1.0.0

About this Skill

Ideal for Reactive Codebase Agents needing to identify performance-degrading blocking calls in Spring WebFlux applications. Find blocking calls in reactive WebFlux code that can cause performance issues and thread starvation

pwittchen pwittchen
[0]
[0]
Updated: 3/12/2026

Killer-Skills Review

Decision support comes first. Repository text comes second.

Reviewed Landing Page Review Score: 9/11

Killer-Skills keeps this page indexable because it adds recommendation, limitations, and review signals beyond the upstream repository text.

Original recommendation layer Concrete use-case guidance Explicit limitations and caution Quality floor passed for review Locale and body language aligned
Review Score
9/11
Quality Score
54
Canonical Locale
en
Detected Body Locale
en

Ideal for Reactive Codebase Agents needing to identify performance-degrading blocking calls in Spring WebFlux applications. Find blocking calls in reactive WebFlux code that can cause performance issues and thread starvation

Core Value

Empowers agents to detect thread starvation and deadlocks by scanning for Mono/Flux blocking subscriptions, such as `block()`, `blockFirst()`, and `blockLast()` patterns, ensuring optimal reactive code performance using Grep for pattern search.

Ideal Agent Persona

Ideal for Reactive Codebase Agents needing to identify performance-degrading blocking calls in Spring WebFlux applications.

Capabilities Granted for profile-blocking

Debugging thread starvation in Spring WebFlux
Identifying performance-degrading blocking calls
Optimizing reactive codebases for better scalability

! Prerequisites & Limits

  • Requires knowledge of Spring WebFlux and reactive programming
  • Limited to identifying specific blocking patterns

Source Boundary

The section below is imported from the upstream repository and should be treated as secondary evidence. Use the Killer-Skills review above as the primary layer for fit, risk, and installation decisions.

After The Review

Decide The Next Action Before You Keep Reading Repository Material

Killer-Skills should not stop at opening repository instructions. It should help you decide whether to install this skill, when to cross-check against trusted collections, and when to move into workflow rollout.

Labs Demo

Browser Sandbox Environment

⚡️ Ready to unleash?

Experience this Agent in a zero-setup browser environment powered by WebContainers. No installation required.

Boot Container Sandbox

FAQ & Installation Steps

These questions and steps mirror the structured data on this page for better search understanding.

? Frequently Asked Questions

What is profile-blocking?

Ideal for Reactive Codebase Agents needing to identify performance-degrading blocking calls in Spring WebFlux applications. Find blocking calls in reactive WebFlux code that can cause performance issues and thread starvation

How do I install profile-blocking?

Run the command: npx killer-skills add pwittchen/varun.surf/profile-blocking. It works with Cursor, Windsurf, VS Code, Claude Code, and 19+ other IDEs.

What are the use cases for profile-blocking?

Key use cases include: Debugging thread starvation in Spring WebFlux, Identifying performance-degrading blocking calls, Optimizing reactive codebases for better scalability.

Which IDEs are compatible with profile-blocking?

This skill is compatible with Cursor, Windsurf, VS Code, Trae, Claude Code, OpenClaw, Aider, Codex, OpenCode, Goose, Cline, Roo Code, Kiro, Augment Code, Continue, GitHub Copilot, Sourcegraph Cody, and Amazon Q Developer. Use the Killer-Skills CLI for universal one-command installation.

Are there any limitations for profile-blocking?

Requires knowledge of Spring WebFlux and reactive programming. Limited to identifying specific blocking patterns.

How To Install

  1. 1. Open your terminal

    Open the terminal or command line in your project directory.

  2. 2. Run the install command

    Run: npx killer-skills add pwittchen/varun.surf/profile-blocking. The CLI will automatically detect your IDE or AI agent and configure the skill.

  3. 3. Start using the skill

    The skill is now active. Your AI agent can use profile-blocking immediately in the current project.

Upstream Repository Material

The section below is imported from the upstream repository and should be treated as secondary evidence. Use the Killer-Skills review above as the primary layer for fit, risk, and installation decisions.

Upstream Source

profile-blocking

Install profile-blocking, an AI agent skill for AI agent workflows and automation. Review the use cases, limitations, and setup path before rollout.

SKILL.md
Readonly
Upstream Repository Material
The section below is imported from the upstream repository and should be treated as secondary evidence. Use the Killer-Skills review above as the primary layer for fit, risk, and installation decisions.
Supporting Evidence

Profile Blocking Skill

Identify blocking calls in the reactive codebase that can cause thread starvation, deadlocks, and performance degradation in Spring WebFlux applications.

Instructions

1. Search for Blocking Patterns

Use Grep to search for these blocking call patterns:

Direct Blocking Calls

java
1.block() // Mono/Flux blocking subscription 2.blockFirst() // Flux blocking first element 3.blockLast() // Flux blocking last element 4.blockOptional() // Mono blocking to Optional 5.toFuture().get() // CompletableFuture blocking 6.get() // Future.get() blocking 7.join() // CompletableFuture.join()

Thread Blocking

java
1Thread.sleep( // Thread sleep 2Object.wait( // Object monitor wait 3.await( // CountDownLatch, CyclicBarrier await 4.acquire( // Semaphore blocking acquire 5synchronized // Synchronized blocks (potential) 6ReentrantLock.lock // Explicit locking

Blocking I/O

java
1InputStream // Blocking input streams 2OutputStream // Blocking output streams 3FileInputStream // File I/O 4FileOutputStream // File I/O 5BufferedReader // Blocking readers 6Scanner // Blocking scanner 7new URL( // URL.openStream() is blocking 8HttpURLConnection // Blocking HTTP

JDBC/Database (if present)

java
1JdbcTemplate // Blocking JDBC 2EntityManager // Blocking JPA 3.save( // Repository blocking save 4.findBy // Repository blocking find 5DataSource // Direct datasource access

2. Context-Aware Analysis

For each finding, determine if it's:

Acceptable blocking:

  • Inside StructuredTaskScope (this project uses Java 24 virtual threads)
  • In @Scheduled methods running on separate thread pool
  • In test code
  • Wrapped in Mono.fromCallable() with .subscribeOn(Schedulers.boundedElastic())
  • In startup/initialization code (non-request path)

Problematic blocking:

  • In @RestController methods returning Mono/Flux
  • In reactive chain operators (map, flatMap, filter)
  • On Netty event loop threads
  • In WebFilter implementations
  • Inside Mono.create() or Flux.create() without scheduler

3. Analyze Reactive Chains

Check for anti-patterns in reactive code:

java
1// BAD: Blocking in map 2mono.map(data -> { 3 blockingCall(); // Blocks event loop! 4 return result; 5}) 6 7// BAD: Blocking in flatMap 8flux.flatMap(item -> { 9 var result = blockingService.call(); // Blocks! 10 return Mono.just(result); 11}) 12 13// GOOD: Proper offloading 14mono.flatMap(data -> 15 Mono.fromCallable(() -> blockingCall()) 16 .subscribeOn(Schedulers.boundedElastic()) 17)

4. Check This Project's Specific Patterns

Files to examine:

  • src/main/java/**/controller/*.java - REST endpoints
  • src/main/java/**/service/*.java - Service layer
  • src/main/java/**/strategy/*.java - Strategy implementations
  • src/main/java/**/config/*.java - Configuration classes

Known acceptable patterns in this project:

  • StructuredTaskScope usage in AggregatorService (virtual threads)
  • .block() inside virtual thread contexts
  • OkHttp calls (executed in separate thread pool)

Patterns to flag:

  • .block() in controller methods
  • Blocking in WebFilter or HandlerFilterFunction
  • Synchronous HTTP calls without proper scheduling

5. Virtual Thread Considerations

This project uses Java 24 with virtual threads. Check:

java
1// Virtual thread factory usage 2Thread.ofVirtual().factory() 3 4// StructuredTaskScope usage (blocking is OK inside) 5try (var scope = new StructuredTaskScope.ShutdownOnFailure()) { 6 scope.fork(() -> blockingCall()); // OK - virtual thread 7 scope.join(); // OK - virtual thread blocks, not platform thread 8}

6. HTTP Client Analysis

Check OkHttp usage patterns:

java
1// Synchronous call - check if on reactive thread 2Response response = client.newCall(request).execute(); 3 4// Better: Use async 5client.newCall(request).enqueue(callback); 6 7// Or wrap properly 8Mono.fromCallable(() -> client.newCall(request).execute()) 9 .subscribeOn(Schedulers.boundedElastic())

Output Format

markdown
1## Blocking Call Analysis Report 2 3### Summary 4| Category | Count | Severity | 5|----------|-------|----------| 6| Direct .block() calls | X | High/Medium | 7| Thread.sleep() | X | High | 8| Blocking I/O | X | Medium | 9| Synchronized blocks | X | Low | 10| **Total potential issues** | **Y** | | 11 12### Critical Issues (Event Loop Blocking) 13 14#### [Issue Title] 15**File**: `path/to/file.java:line` 16**Pattern**: `.block()` in reactive chain 17**Context**: Inside @RestController endpoint 18**Risk**: Thread starvation, request timeouts 19```java 20// Current code 21@GetMapping("/data") 22public Mono<Data> getData() { 23 return service.fetchData() 24 .map(d -> blockingTransform(d)); // BLOCKS! 25}

Fix:

java
1@GetMapping("/data") 2public Mono<Data> getData() { 3 return service.fetchData() 4 .flatMap(d -> Mono.fromCallable(() -> blockingTransform(d)) 5 .subscribeOn(Schedulers.boundedElastic())); 6}

Medium Priority (Potential Issues)

FileLinePatternContextVerdict
Service.java42.block()Inside StructuredTaskScopeOK
Handler.java78Thread.sleepTest codeOK

Acceptable Blocking (Verified Safe)

These blocking calls are in appropriate contexts:

FileLinePatternWhy It's OK
AggregatorService.java120.block()Inside virtual thread scope
ForecastService.java85OkHttp.execute()Wrapped in fromCallable

Patterns Found

.block() Calls

src/main/java/.../Service.java:42  - response.block()
src/main/java/.../Service.java:87  - result.blockFirst()

Thread Blocking

src/main/java/.../Worker.java:23   - Thread.sleep(1000)

Blocking I/O

src/main/java/.../Reader.java:15   - new FileInputStream()

Recommendations

  1. Immediate: Move blocking call at File.java:42 to bounded elastic scheduler
  2. Review: Verify StructuredTaskScope usage covers all blocking in AggregatorService
  3. Consider: Replace synchronous OkHttp with async calls or WebClient

Reactive Best Practices Checklist

  • No .block() in @RestController methods
  • No .block() in WebFilter implementations
  • Blocking I/O wrapped with boundedElastic scheduler
  • Thread.sleep() only in tests or scheduled tasks
  • Synchronized blocks minimized and not in hot paths
  • HTTP clients properly configured for async or offloaded

## Execution Steps

1. Use `Grep` to find all `.block()` calls
2. Use `Grep` to find `Thread.sleep`, `.await(`, `synchronized`
3. Use `Grep` to find blocking I/O patterns
4. Read each file to determine context (controller vs service vs test)
5. Check if blocking is inside StructuredTaskScope or virtual thread
6. Categorize findings by severity
7. Generate report with fix recommendations

## Notes

- Virtual threads (Java 21+) change the blocking calculus - blocking is OK on virtual threads
- This project uses StructuredTaskScope, so verify scope boundaries
- OkHttp is blocking by default but may be acceptable if not on event loop
- Focus on request-handling paths; scheduled tasks are lower priority
- Some `.block()` in tests is normal and acceptable
- Spring WebFlux Netty uses limited event loop threads - blocking them is critical

Related Skills

Looking for an alternative to profile-blocking or another community skill for your workflow? Explore these related open-source skills.

View All

openclaw-release-maintainer

Logo of openclaw
openclaw

Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

333.8k
0
AI

widget-generator

Logo of f
f

Generate customizable widget plugins for the prompts.chat feed system

149.6k
0
AI

flags

Logo of vercel
vercel

The React Framework

138.4k
0
Browser

pr-review

Logo of pytorch
pytorch

Tensors and Dynamic neural networks in Python with strong GPU acceleration

98.6k
0
Developer