The document discusses performance tuning of Alfresco. It covers JVM tuning including memory and garbage collection settings. It also discusses analyzing garbage collection logs and common problems. The document outlines different cache mechanisms in Alfresco including L1, L2 caches and Hazelcast caching. Tuning caches based on data change frequency and hit ratios is recommended. Finally, the document provides guidance on investigating performance issues by examining logs, threads, databases, storage and Alfresco/Solr configurations and settings.
This is the session delivered during the Alfresco Developers Conference in Lisbon, January 2018. Learn all what you need to know to perform a proper backup and disaster recovery strategy. From a single server installation with hundreds of documents to a large deployment with multiple nodes, layers, databases and multi-million documents. What is the best way for each case?
Alfresco DevCon 2019 Performance Tools of the TradeLuis Colorado
Discover tips and tools that will help you to keep your Alfresco environment in shape. Most of the best tools are free or Open Source, and this presentation will guide you through the steps to improve the performance of your system.
Alfresco node lifecyle, services and zonesSanket Mehta
This ppt explains you the details about an alfresco node lifecycle (including which alfresco database tables are affected upon node operation-like node creation, deletion). Apart from it, it also explain which particular case-sensitive alfresco service should be used (nodeService vs NodeService, searchService vs SearchService) in order to maintain security in your application. Lastly it covers zones in alfresco (authentication-related zones and application-related zones)
This is the session delivered during the Alfresco Developers Conference in Lisbon, January 2018. Learn all what you need to know to perform a proper backup and disaster recovery strategy. From a single server installation with hundreds of documents to a large deployment with multiple nodes, layers, databases and multi-million documents. What is the best way for each case?
Alfresco DevCon 2019 Performance Tools of the TradeLuis Colorado
Discover tips and tools that will help you to keep your Alfresco environment in shape. Most of the best tools are free or Open Source, and this presentation will guide you through the steps to improve the performance of your system.
Alfresco node lifecyle, services and zonesSanket Mehta
This ppt explains you the details about an alfresco node lifecycle (including which alfresco database tables are affected upon node operation-like node creation, deletion). Apart from it, it also explain which particular case-sensitive alfresco service should be used (nodeService vs NodeService, searchService vs SearchService) in order to maintain security in your application. Lastly it covers zones in alfresco (authentication-related zones and application-related zones)
How to migrate from Alfresco Search Services to Alfresco SearchEnterpriseAngel Borroy López
Presentation on how to move from the Alfresco Search Services product based in Apache Solr to the new Alfresco Search Enterprise integrated with Elasticsearch and Amazon Opensearch.
The objective of this article is to describe what to monitor in and around Alfresco in order to have a good understanding of how the applications are performing and to be aware of potential issues.
Alfresco Web Scripts have become an important part of any Alfresco developer's tool kit and in this session we will take a deep dive into how Web Scripts can be used to provide public APIs for Alfresco extensions. After briefly reviewing the anatomy of a Web Script and discussing Alfresco's approach to Service development, we will work through an example that extends Alfresco with a simple service and creates a REST API using Web Scripts.
Alfresco DevCon 2019 (Edinburgh)
"Transforming the Transformers" for Alfresco Content Services (ACS) 6.1 & beyond
https://community.alfresco.com/community/ecm/blog/2019/02/07/alfresco-transform-service-new-with-acs-61
Alfresco provides various content transformation options across the Digital Business Platform (DBP). In this talk, we will explore the new independently-scalable Alfresco Transform Service. This enables a new option for transforms to be asynchronously off-loaded by Alfresco Content Services (ACS).
https://devcon.alfresco.com/speaker/jan-vonka/
Infrastructure, use cases and performance considerations for
an Enterprise Grade ECM implementation up to 1B documents on AWS (Amazon Web Services EC2 and Aurora) based on the Alfresco (http://www.alfresco.com) Platform, leading Open Source Enterprise Content Management system.
In this session, we'll discuss architectural, design and tuning best practices for building rock solid and scalable Alfresco Solutions. We'll cover the typical use cases for highly scalable Alfresco solutions, like massive injection and high concurrency, also introducing 3.3 and 3.4 Transfer / Replication services for building complex high availability enterprise architectures.
Moving Gigantic Files Into and Out of the Alfresco RepositoryJeff Potts
This talk is a technical case study showing show Metaversant solved a problem for one of their clients, Noble Research Institute. Researchers at Noble deal with very large files which are often difficult to move into and out of the Alfresco repository.
This session will provide a guide to Alfresco truststores and keystores. Several live examples will be shown, including the replacement of existing cryptographic stores or certificates. Additionally, a troubleshooting configuration guide for mTLS communication will be provided.
Features of Alfresco Search Services.
Features of Alfresco Search & Insight Engine.
Future plans for the product
---
DEMO GUIDE
[1] Queries: Share > Node Browser
ASPECT:'cm:titled' AND cm:title:'*Sample*' AND TEXT:'code'
SELECT * FROM cm:titled WHERE cm:title like '%Sample%' AND CONTAINS('code')
[2] Queries: Share > JS Console
var ctxt = Packages.org.springframework.web.context.ContextLoader.getCurrentWebApplicationContext();
var searchService = ctxt.getBean('SearchService', org.alfresco.service.cmr.search.SearchService);
var StoreRef = Packages.org.alfresco.service.cmr.repository.StoreRef;
var SearchService = Packages.org.alfresco.service.cmr.search.SearchService;
var ResultSet = Packages.org.alfresco.repo.search.impl.lucene.SolrJSONResultSet;
ResultSet =
searchService.query(
StoreRef.STORE_REF_WORKSPACE_SPACESSTORE,
SearchService.LANGUAGE_FTS_ALFRESCO,
"ASPECT:'cm:titled' AND cm:title:'*Sample*' AND TEXT:'code'");
logger.log(ResultSet.getNodeRefs());
---
var ctxt = Packages.org.springframework.web.context.ContextLoader.getCurrentWebApplicationContext();
var searchService = ctxt.getBean('SearchService', org.alfresco.service.cmr.search.SearchService);
var StoreRef = Packages.org.alfresco.service.cmr.repository.StoreRef;
var SearchService = Packages.org.alfresco.service.cmr.search.SearchService;
var ResultSet = Packages.org.alfresco.repo.search.impl.lucene.SolrJSONResultSet;
ResultSet =
searchService.query(
StoreRef.STORE_REF_WORKSPACE_SPACESSTORE,
SearchService.LANGUAGE_CMIS_ALFRESCO,
"SELECT * FROM cm:titled WHERE cm:title like '%Sample%' AND CONTAINS('code')");
logger.log(ResultSet.getNodeRefs());
---
var def =
{
query: "ASPECT:'cm:titled' AND cm:title:'*Sample*' AND TEXT:'code'",
language: "fts-alfresco"
};
var results = search.query(def);
logger.log(results);
[3] Queries: api-explorer
{
"query": {
"language": "afts",
"query": "ASPECT:\"cm:titled\" AND cm:title:\"*Sample\" AND TEXT:\"code\""
}
}
---
{
"query": {
"language": "cmis",
"query": "SELECT * FROM cm:titled WHERE cm:title like '%Sample%' AND CONTAINS('code')"
}
}
[4] Queries: CMIS Workbench > Groovy Console
rs = session.query("SELECT * FROM cm:titled WHERE cm:title like '%Sample%' AND CONTAINS('code')", false)
for (res in rs) {
println(res.getPropertyValueById('cmis:objectId'))
}
[5] Queries: SOLR Web Console > (alfresco) > Query
/afts
ASPECT:'cm:titled' AND cm:title:'*Sample*' AND TEXT:'code'
---
/cmis
SELECT * FROM cm:titled WHERE cm:title like '%Sample%' AND CONTAINS('code')
---
Fine Tuning and Enhancing Performance of Apache Spark JobsDatabricks
Apache Spark defaults provide decent performance for large data sets but leave room for significant performance gains if able to tune parameters based on resources and job.
CUST-10 Customizing the Upload File(s) dialog in Alfresco ShareAlfresco Software
Many Alfresco projects require customizations to the Share user interface that go beyond the normal configuration. This usually involves changing/overriding Repository Web Scripts and Surf Web Scripts, updating JavaScript and CSS files, coding with the Yahoo UI Library, etc. This session will customize the Alfresco Share Upload File(s) dialog and show you how to: Add Widgets to the Upload File(s) dialog, Override Surf Web Scripts, Override/Update JavaScript and CSS files, Write Repository Web Scripts, Call Web Scripts from Yahoo UI Library code, and Setup a build project for these customizations. This session will present the advanced customization concepts via hands-on tutorial and slides.
Sizing an alfresco infrastructure has always been an interesting topic with lots of unrevealed questions. There is no perfect formula that can accurately define what is the perfect sizing for your architecture considering your use case. However, we can provide you with valuable guidance on how to size your Alfresco solution, by asking the right questions, collecting the right numbers, and taking the right assumptions on a very interesting sizing exercise.
How many alfresco servers will you need on your alfresco cluster? How many CPUs/cores do you need on those servers to handle your estimated user concurrency? How do you estimate the sizing and growth of your storage? How much memory do you need on your Solr servers? How many Solr servers do you need to get the response times you require? What are the golden rules that can drive and maintain the success of an Alfresco project?
How to migrate from Alfresco Search Services to Alfresco SearchEnterpriseAngel Borroy López
Presentation on how to move from the Alfresco Search Services product based in Apache Solr to the new Alfresco Search Enterprise integrated with Elasticsearch and Amazon Opensearch.
The objective of this article is to describe what to monitor in and around Alfresco in order to have a good understanding of how the applications are performing and to be aware of potential issues.
Alfresco Web Scripts have become an important part of any Alfresco developer's tool kit and in this session we will take a deep dive into how Web Scripts can be used to provide public APIs for Alfresco extensions. After briefly reviewing the anatomy of a Web Script and discussing Alfresco's approach to Service development, we will work through an example that extends Alfresco with a simple service and creates a REST API using Web Scripts.
Alfresco DevCon 2019 (Edinburgh)
"Transforming the Transformers" for Alfresco Content Services (ACS) 6.1 & beyond
https://community.alfresco.com/community/ecm/blog/2019/02/07/alfresco-transform-service-new-with-acs-61
Alfresco provides various content transformation options across the Digital Business Platform (DBP). In this talk, we will explore the new independently-scalable Alfresco Transform Service. This enables a new option for transforms to be asynchronously off-loaded by Alfresco Content Services (ACS).
https://devcon.alfresco.com/speaker/jan-vonka/
Infrastructure, use cases and performance considerations for
an Enterprise Grade ECM implementation up to 1B documents on AWS (Amazon Web Services EC2 and Aurora) based on the Alfresco (http://www.alfresco.com) Platform, leading Open Source Enterprise Content Management system.
In this session, we'll discuss architectural, design and tuning best practices for building rock solid and scalable Alfresco Solutions. We'll cover the typical use cases for highly scalable Alfresco solutions, like massive injection and high concurrency, also introducing 3.3 and 3.4 Transfer / Replication services for building complex high availability enterprise architectures.
Moving Gigantic Files Into and Out of the Alfresco RepositoryJeff Potts
This talk is a technical case study showing show Metaversant solved a problem for one of their clients, Noble Research Institute. Researchers at Noble deal with very large files which are often difficult to move into and out of the Alfresco repository.
This session will provide a guide to Alfresco truststores and keystores. Several live examples will be shown, including the replacement of existing cryptographic stores or certificates. Additionally, a troubleshooting configuration guide for mTLS communication will be provided.
Features of Alfresco Search Services.
Features of Alfresco Search & Insight Engine.
Future plans for the product
---
DEMO GUIDE
[1] Queries: Share > Node Browser
ASPECT:'cm:titled' AND cm:title:'*Sample*' AND TEXT:'code'
SELECT * FROM cm:titled WHERE cm:title like '%Sample%' AND CONTAINS('code')
[2] Queries: Share > JS Console
var ctxt = Packages.org.springframework.web.context.ContextLoader.getCurrentWebApplicationContext();
var searchService = ctxt.getBean('SearchService', org.alfresco.service.cmr.search.SearchService);
var StoreRef = Packages.org.alfresco.service.cmr.repository.StoreRef;
var SearchService = Packages.org.alfresco.service.cmr.search.SearchService;
var ResultSet = Packages.org.alfresco.repo.search.impl.lucene.SolrJSONResultSet;
ResultSet =
searchService.query(
StoreRef.STORE_REF_WORKSPACE_SPACESSTORE,
SearchService.LANGUAGE_FTS_ALFRESCO,
"ASPECT:'cm:titled' AND cm:title:'*Sample*' AND TEXT:'code'");
logger.log(ResultSet.getNodeRefs());
---
var ctxt = Packages.org.springframework.web.context.ContextLoader.getCurrentWebApplicationContext();
var searchService = ctxt.getBean('SearchService', org.alfresco.service.cmr.search.SearchService);
var StoreRef = Packages.org.alfresco.service.cmr.repository.StoreRef;
var SearchService = Packages.org.alfresco.service.cmr.search.SearchService;
var ResultSet = Packages.org.alfresco.repo.search.impl.lucene.SolrJSONResultSet;
ResultSet =
searchService.query(
StoreRef.STORE_REF_WORKSPACE_SPACESSTORE,
SearchService.LANGUAGE_CMIS_ALFRESCO,
"SELECT * FROM cm:titled WHERE cm:title like '%Sample%' AND CONTAINS('code')");
logger.log(ResultSet.getNodeRefs());
---
var def =
{
query: "ASPECT:'cm:titled' AND cm:title:'*Sample*' AND TEXT:'code'",
language: "fts-alfresco"
};
var results = search.query(def);
logger.log(results);
[3] Queries: api-explorer
{
"query": {
"language": "afts",
"query": "ASPECT:\"cm:titled\" AND cm:title:\"*Sample\" AND TEXT:\"code\""
}
}
---
{
"query": {
"language": "cmis",
"query": "SELECT * FROM cm:titled WHERE cm:title like '%Sample%' AND CONTAINS('code')"
}
}
[4] Queries: CMIS Workbench > Groovy Console
rs = session.query("SELECT * FROM cm:titled WHERE cm:title like '%Sample%' AND CONTAINS('code')", false)
for (res in rs) {
println(res.getPropertyValueById('cmis:objectId'))
}
[5] Queries: SOLR Web Console > (alfresco) > Query
/afts
ASPECT:'cm:titled' AND cm:title:'*Sample*' AND TEXT:'code'
---
/cmis
SELECT * FROM cm:titled WHERE cm:title like '%Sample%' AND CONTAINS('code')
---
Fine Tuning and Enhancing Performance of Apache Spark JobsDatabricks
Apache Spark defaults provide decent performance for large data sets but leave room for significant performance gains if able to tune parameters based on resources and job.
CUST-10 Customizing the Upload File(s) dialog in Alfresco ShareAlfresco Software
Many Alfresco projects require customizations to the Share user interface that go beyond the normal configuration. This usually involves changing/overriding Repository Web Scripts and Surf Web Scripts, updating JavaScript and CSS files, coding with the Yahoo UI Library, etc. This session will customize the Alfresco Share Upload File(s) dialog and show you how to: Add Widgets to the Upload File(s) dialog, Override Surf Web Scripts, Override/Update JavaScript and CSS files, Write Repository Web Scripts, Call Web Scripts from Yahoo UI Library code, and Setup a build project for these customizations. This session will present the advanced customization concepts via hands-on tutorial and slides.
Sizing an alfresco infrastructure has always been an interesting topic with lots of unrevealed questions. There is no perfect formula that can accurately define what is the perfect sizing for your architecture considering your use case. However, we can provide you with valuable guidance on how to size your Alfresco solution, by asking the right questions, collecting the right numbers, and taking the right assumptions on a very interesting sizing exercise.
How many alfresco servers will you need on your alfresco cluster? How many CPUs/cores do you need on those servers to handle your estimated user concurrency? How do you estimate the sizing and growth of your storage? How much memory do you need on your Solr servers? How many Solr servers do you need to get the response times you require? What are the golden rules that can drive and maintain the success of an Alfresco project?
Customer Success is a core value at Alfresco, and for this we have invested in people, processes and tools to maximize the possibility of our Partners and Customers succeeding in Alfresco Projects. In this session, Gab will share his 5+ years experience on running successful Alfresco projects, providing a comprehensive but practical set of recommendations, to overcome common business & technical hurdles of an Enterprise wide ECM implementation and ensure continued success for your projects.
This preso also introduces the first pilot of Alfresco Developer Support service, geared towards helping customers and partners developers in developing high quality, scalable and high longevity Alfresco customizations, as well as to help you support those customizations in production.
Alfresco Tech Talk Live - REST API of the Future Gavin Cornwell
Alfresco Repository comes with a great REST API but some of these API's can be difficult to navigate and use. Gavin Cornwell, Engineering Manager, Content Services Practise at Alfresco will tell us about the future of REST API's, where the market is moving and how we are embracing this future at Alfresco.
Deep Dive: Alfresco Core Repository (... embedded in a micro-services style a...J V
Alfresco Summit 2014 (London)
Though best practice is to leverage Alfresco through the well defined API's, it can be useful to understand the internals of the repository so that your development efforts are the most effective. A deep understanding of the repository will help you to evaluate performance bottlenecks, look for bugs, or make contributions. This session provides an overview of the repository internals, including the major components, the key services, subsystems, and database. We then provide an example where we leverage the repository in a micro-service architecture while building Alfresco's future cloud products and show how the different parts of the repository interact to fulfill requests.
http://summit.alfresco.com/london/sessions/diving-deep-alfresco-repository
https://www.youtube.com/watch?v=TAE9UjC0xxc
Alfresco Tech Talk Live #92 - Model ManagementMike Farman
Content Model Manager is a new admin component that allows you to easily create new types, aspects and forms. In addition you can deploy these directly on the server, without any restarts. Mike Farman will walk us through the new feature and give some deeper insights on how this feature works
Table of Content
1. Alfresco 4.0 version-buzzword compliance
2. What’s new in Alfresco 4.0
3. Cloud Scale Performance
4. Open Platform for Social Channel Publishing
5. Greater Adoption to Enhance User Experience
6. How it enhances users experience
7. Repository building blocks
8. Solr Search Service
9. Indexing Control
10. Other Repository Enhancement
11. Work-flow
12. Release of alfresco 4.0
13. Release of alfresco 4.0 sub-versions and 4.2 sub-versions
14. Complete Installation of alfresco 4.2 Versions
15. Alfresco open source ECM solution- Algoworks Technologies Pvt. Ltd.
16. Reliable Open Source ECM platform-with no upfront cost.
17. FAQ1
18. FAQ2
19. FAQ3
20. Do you have more questions?
Organizations continue to adopt Solr because of its ability to scale to meet even the most demanding workflows. Recently, LucidWorks has been leading the effort to identify, measure, and expand the limits of Solr. As part of this effort, we've learned a few things along the way that should prove useful for any organization wanting to scale Solr. Attendees will come away with a better understanding of how sharding and replication impact performance. Also, no benchmark is useful without being repeatable; Tim will also cover how to perform similar tests using the Solr-Scale-Toolkit in Amazon EC2.
[Hanoi-August 13] Tech Talk on Caching SolutionsITviec
ITviec Tech Talk
Hanoi, 24 August 2013
Topic: Caching Solutions
Speaker: Mr. Hoang Tran from Niteco
For full report of the talk: http://blog.itviec.com/2013/08/caching-solutions-response-time-niteco/
Apache Impala is a complex engine and requires a thorough technical understanding to utilize it fully. Without proper configuration or usage, Impala’s performance becomes unpredictable, and end-user experience suffers. However, for many users and administrators, the right configuration of Impala is still a mystery.
Drawing on work with some of the largest clusters in the world, Manish Maheshwari shares ingestion best practices to keep an Impala deployment scalable and details admission control configuration to provide a consistent experience to end users. Manish also takes a high-level look at Impala’s query profile, which is used as a first step in any performance troubleshooting, and discusses common mistakes users and BI tools make when interacting with Impala. Manish concludes by detailing an ideal setup to show all of this in practice.
Apache Impala is a complex engine and requires a thorough technical understanding to utilize it fully. Without proper configuration or usage, Impala’s performance becomes unpredictable, and end-user experience suffers. However, for many users and administrators, the right configuration of Impala is still a mystery.
Drawing on work with some of the largest clusters in the world, Manish Maheshwari shares ingestion best practices to keep an Impala deployment scalable and details admission control configuration to provide a consistent experience to end users. Manish also takes a high-level look at Impala’s query profile, which is used as a first step in any performance troubleshooting, and discusses common mistakes users and BI tools make when interacting with Impala. Manish concludes by detailing an ideal setup to show all of this in practice.
You have amazing content and you want to get it to your users as fast as possible. In today’s industry, milliseconds matter and slow websites will never keep up. You can use a CDN but they are expensive, make you dependent on a third party to deliver your content, and can be notoriously inflexible. Enter Varnish, a powerful, open-source caching reverse proxy that lives in your network and lets you take control of how your content is managed and delivered. We’ll discuss how to install and configure Varnish in front of a typical web application, how to handle sessions and security, and how you can customize Varnish to your unique needs. This session will teach you how Varnish can help you give your users a better experience while saving your company and clients money at the same time.
Container Performance Analysis Brendan Gregg, NetflixDocker, Inc.
Containers pose interesting challenges for performance monitoring and analysis, requiring new analysis methodologies and tooling. Resource-oriented analysis, as is common with systems performance tools and GUIs, must now account for both hardware limits and soft limits, as implemented using resource controls including cgroups. The interaction between containers can also be examined, and noisy neighbors either identified of exonerated. Performance tooling can also need special usage or workarounds to function properly from within a container or on the host, to deal with different privilege levels and name spaces. At Netflix, we're using containers for some microservices, and care very much about analyzing and tuning our containers to be as fast and efficient as possible. This talk will show how to successfully analyze performance in a Docker container environment, and navigate differences encountered.
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Albert Hoitingh
In this session I delve into the encryption technology used in Microsoft 365 and Microsoft Purview. Including the concepts of Customer Key and Double Key Encryption.
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
After immersing yourself in the blue book and its red counterpart, attending DDD-focused conferences, and applying tactical patterns, you're left with a crucial question: How do I ensure my design is effective? Tactical patterns within Domain-Driven Design (DDD) serve as guiding principles for creating clear and manageable domain models. However, achieving success with these patterns requires additional guidance. Interestingly, we've observed that a set of constraints initially designed for training purposes remarkably aligns with effective pattern implementation, offering a more ‘mechanical’ approach. Let's explore together how Object Calisthenics can elevate the design of your tactical DDD patterns, offering concrete help for those venturing into DDD for the first time!
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
3. Agenda
1 – Jvm tuning
2 – Garbage collection analisis
2 – Caches
3 - Alfresco is running slow.. where to start ?
4. 1 – JVM Tuning
• Tune the memory and garbage collection parameters for the JVM to be
appropriate for your situation. Enable GC logs and analyze them.
• Solr is more memory intensive than Alfresco
• Alfresco consumes memory on the repository L2 Cache, Alfresco system memory.
• Tuning will vary depending if you are running Alfresco and Solr on the same server
and same Jvm.
• General good settings for Alfresco (assuming a server with 16GB RAM)
-Xms8000m –Xmx12000m -XX:MaxPermSize=512m -Xss1024K
-XX:-DisableExplicitGC -XX:NewSize=2G -XX:+UseCodeCacheFlushing
-Dsun.security.ssl.allowUnsafeRenegotiation=true -Djava.awt.headless=true
• Extra Settings found on large Alfresco implementations (solr better with CMS)
-XX:+UseConcMarkSweepGC –server
-XX:+CMSIncrementalMode -XX:CMSInitiatingOccupancyFraction=80
-XX:+UseParNewGC -XX:ParallelGCThreads=4
-XX:+UseCompressedOops -XX:+CMSClassUnloadingEnabled
5. 1 – Garbage Collector Tuning
A regular analysis to the garbage collection logs is also a known best practice
and the health of the Garbage collection engine is normally related with the
overall effectiveness of memory usage across the system. This is valid for
Alfresco, Solr and any possible client that is part of the deployment.
The best practice is to choose an analysis timeframe which is know to be the
period when the system is most heavily used and monitor the garbage
collection operations that happened during that period.
There are some available tools to analyze garbage collection logs, but the one I
think generates a more accurate report is Censum from Jclarity. It’s possible to
download a trial version of this tool as use it to analyze the GC logs during 7
days.
You can also GCViewer, its opensource and a very useful tool.
https://github.com/chewiebug/GCViewer
6. 1 – Garbage Collector common problems
1 - Look for periodic calls to system.gc(); - add the -XX:+DisableExplicitGC flag
2 - Look for high pauses
High pauses from garbage collection can be an indication of a number of problems. A High
Percentage Of Time spent paused in GC may mean that the heap has been under-sized, causing
frequent full GC activity. A high Longest Pause in Seconds may be an indication that the heap is too
large, causing long individual garbage collections.
3 - Look for premature promotion of objects
Premature promotion is a condition that occurs when objects that should be collected in a young
generation pool (Eden or The Survivor "From" space) are instead promoted to Tenured (Old) space.
A consequence of premature promotion is that this places additional pressure on Tenured space,
which will result in more frequent collections of Tenured. More frequent collections in Tenured
collector will interfere with your application's performance.Look for premature
7. 2 – Caches (ehcache/hazzlecast)
• Alfresco now uses hazelecast clustering and caching
• Database is now used for cluster discovery
• Removing a node from the cluster is now configured on the alfresco-global.properties
• alfresco.cluster.enabled=false
• The repository caches are separated in 2 different levels:
• L1 = The transactional cache (TransactionalCache.java)
• L2 = Hazelcast distributed Cache (>4.2.X)
• The level 1 cache commits to L2 cache.
• Tracing cache usage is very important for tuning
• Adding the following options to your JVM will expose the jmx features of hazelcast.
• -Dhazelcast.jmx=true -Dhazelcast.jmx.detailed=true
8. 2 – Caches (ehcache/hazzlecast)
• In Alfresco, hazelcast works with factories that allow the creation of caches
• You can define your own caches
9. 2 – Hazzlecast cache mechanisms
With Hazelcast the cache is distributed across the clustering members, doing a more
linear distribution of the memory usage. In the alfresco implementation you have more
mechanisms available to define different cache cluster types.
Fully Distributed
This is the normal value for a hazelcast cache. Cache values (key value pairs) will be
evenly distributed across cluster members. Leads to more remote lookups when a get
request is issued and that value is present in other node (remote).
Local cache
Some caches you may not actually want them to be clustered at all (or distributed), so
this option works as a unclustered cache.
Invalidating
This is a local (cluster aware) cache that sets up a messenger that sends invalidation
messages messages to the remaining cluster nodes if you updated an item in the cache,
much similar as the old eh-cache mechanisms.
10. 2 – Tuning hazelcast
To perform a cache tuning exercise we need to analyze 3 relevant factors :
- type of data
- how often it changes
- number of gets compared to the number of writes
If we can identify caches that the correspondent values do not change often, its worth to try
and set them to invalidating, and check the performance results.
Note that in distributed-caches, when we have a lot a remote gets, if the objects that are being
stored are big, the remote get operation its going to be slow. This is mainly because the object is
serialized and it needs to be un-serialized before its content is made available and that
operation can take some time depending on the size of the object.
11. 2 – Tuning hazelcast
Caches values can be configured/overridden on alfresco-global.properties
• cache.aclSharedCache.tx.maxItems=40000
• cache.aclSharedCache.maxItems=100000
• cache.aclSharedCache.timeToLiveSeconds=0
• cache.aclSharedCache.maxIdleSeconds=0
• cache.aclSharedCache.cluster.type=fully-distributed
• cache.aclSharedCache.backup-count=1
• cache.aclSharedCache.eviction-policy=LRU
• cache.aclSharedCache.eviction-percentage=25
• cache.aclSharedCache.merge-policy=hz.ADD_NEW_ENTRY
Look for : WARN [cache.node.nodesTransactionalCache] Transactional update cache
‘org.alfresco.cache.node.nodesTransactionalCache’ is full (125000).
12. 3 – Alfresco is running Slow (Where to Start)
• First we need to identify what/where is alfresco running Slow
• Is it Alfresco that is slow ?
• Page Rendering ?
• Dashboard takes a long time to render ?
• Login takes long ?
• Browsing the Repository is very slow (Permission evaluation ? )
• Uploading content performance (bulk import, migration, rules)
• Search is slow
• Workflow problems
• Cpu is 100%
• Memory is exhausted
• Cluster communication problem ?
13. 3 – Alfresco is running Slow (Where to Start)
• Investigating, “Follow the Request”
• Is apache or a physical load balancer being used in front on Alfresco ?
• Are there enough connections/threads/workers available for the existing load.
• Any timeouts on the apache/lb logs ?
• Check overall performance of apache.
• What are the tomcat threads doing
• Use support tools, check real time thread dumps, see behaviors/actions.
• Run a series of jstack commands and check what the threads are doing
• What is consuming the memory
• Extract heapdumps and jstacks and check what is occupying memory
14. 3 – Alfresco is running Slow (Where to Start)
• “Questioning the DB” – Key performance indicators
• Response time
• Blocked queries
• Top queries by frequency and / or time
• Slow Queries
• Average number of Transactions per second (during a peak period)
• Number of Connections (during a peak period)
• Database server health (Cpu, memory, IO, Network)
• Indexes Size and Health
• Inspect JDBC access to the database
• Jdbcspy
• Log4jdbc
• Javamelody
15. 3 – Alfresco is running Slow (Where to Start)
• “Questioning the Storage” – Key performance indicators
• I/O performance (iometer, hdparm)
• Check both
• Alfresco Content Store storage
• Solr Indexes Storage(should be faster)
• Run EVT, last test will check the speed of the indexes disk storage and produce a
meaningful report.
• Checking Indexes disk free space (merging processes require at least 40% free)
16. 3 – Alfresco is running Slow (Where to Start)
• “Questioning Alfresco” – Key performance indicators
• Cpu Usage, Memory Usage, Threads
• Check alfresco.log for ERRORS, WARN
• Can use elasticSearch to aggregate all relevant logs and do a common search
• Enable Transformations log, check for transformation ERRORS
• Verify transformation limits
• Enable GC logs on the alfresco JVM and analise GC performance
• Verify Content policies, rules, scheduled tasks, integrations and customizations
• Analyze use case, and identify the log classes can can produce relevant information
while in DEBUG mode. Use support tools for real time troubleshooting.
17. 3 – Alfresco is running Slow (Where to Start)
• “Questioning Solr” – Key performance indicators
• Cpu Usage, Memory Usage, Threads
• Check solr.log for ERRORS, WARN
• Can use elasticSearch to aggregate all relevant logs and do a common search
• Enable Query logs, check for ERRORS
• Verify Solr statistics / cache usages
• Enable GC logs on the solr JVM and analyze GC performance
• Verify merging problems, slow disks, insufficient free space, configuration problem.
• Analyze search use case, blacklist some mime-types, keep your index small, only
index what you will search for.
Editor's Notes
Tune the memory and garbage collection parameters for the JVM to be appropriate for your situation.
Tuning and deeper inspection of the Java Virtual Machine is a very important activity for java-based applications. In an enterprise-class installation of Alfresco where often one or multiple clustered instances are running, huge amounts of data are stored with a lot of user access that cause often a http overload.
Alfresco can be optimized by a careful and meticulous tuning of the hardware resources, specifically cpu and ram used by the JVM.
There are some available tools to analyze garbage collection logs, but the one I think generates a more accurate report is Censum from Jclarity. It’s possible to download a trial version of this tool as use it to analyze the GC logs during 7 days.
Censum is a nice tool that takes log files from the complex Java™ (JVM) garbage collection sub-system and gives you meaningful answers by providing clear infographics and making recommendations based on the analysis results.
You can also use a completely free tool like GCViewer, it does not provide so the same recommendations but it’s still a very useful tool.
https://github.com/chewiebug/GCViewer
1 ) Periodic calls to trigger a Full GC either via System.gc() or Runtime.gc() preempt the natural flow of GC and corrupt the numerous metrics that are used to help the collectors run as optimally as is possible. There are many possible sources for these calls, which may include:
An RMI call from a remote JVM.
A Timer, TimerTask or ScheduleExecutor thread.
A cron or Quartz job.
Some external trigger causing the Memory MXBean to trigger a Full GC.
add the -XX:+DisableExplicitGC flag
3)
There are a number of possible causes for this problem:
The Eden and/or Survivor spaces may be too small.
The -XX:MaxTenuringThreshold flag may have been set too low.
There are number of possible solutions for this problem:
Alter the size of the young space via the -XX:NewRatio property.
Alter the size of Survivor Spaces (relative to Eden) via the -XX:SurvivorRatio=<N> property using the information provided by the Tenuring graphs. This flag works to divide Young into N + 2 chunks. N chunks will be assigned to Eden and 1 chunk each will be assigned to the To and From spaces respectively.
Alter the -XX:MaxTenuringThreshold property.
Note: enlarging Survivor spaces takes will result in less space being assigned to Eden. The size of Eden times your allocation rate yields the frequency of collections in young generation. Be sure to increase the size of young so that Eden stays the same size in order to avoid increasing the number of young generational collections.
Tracing Hazelcast usage
Transactional Caches (Level 1)
Alfresco version 5.0 introduced a way to trace the transactional cache usage (much similar to the previous ehcache tracing mechanism). Unfortunately that tracing is not available in version 4.2.X, one way to get this feature would be to open a support ticket requesting a back-port of this feature.
HazelCast caches (Level 2)
Using hazelcast mancenter you can trace the L2 cache usage, for more information check http://docs.alfresco.com/4.2/tasks/hazelcast-setup.html
Cache-Factory - Allows for the creation of caches
Messenger-Factory - Abstraction over the hazelcast topic (published subscribe messaging system)
LockStore Factory - Where in-memory locks are kept
You can define your own caches as per the example below
<bean name=“contentDataSharedCache" factory-bean=“cacheFactory" factory-method="createCache">
<constructor-arg value="cache.customContDataCache"/>
</bean>
cache.customContDataCache.maxItems=130000
cache.customContDataCache.timeToLiveSeconds=0
cache.customContDataCache.maxIdleSeconds=0
cache.customContDataCache.cluster.type=fully-distributed
cache.customContDataCache.backup-count=1
cache.customContDataCache.eviction-policy=LRU
cache.customContDataCache.eviction-percentage=25
cache.customContDataCache.merge-policy=hz.ADD_NEW_ENTRY
Note that there is no corresponding hazelcast-tcp.xml entry for the custom cache, the factory does all the configuration programmatically using the name of the cache customContDataCache as a root to discover the remaining configuration properties.
Invalidating
Can be useful to store something that its not serializable, because all the values stored in a hazelcast cache must be serializable. That is the way hazlecast send the information to the member its going to be stored on.
If you got a cache where there is an enormous number of reads and very rare writes, using a invalidating cache can be the best approach, very likely to the way ehcache used to work. This was introduced also because there were some non serializable values in alfresco that could not reside on a fully-distributed cache.
The way we define the caches (on our cache.properties file is as follows)
cache.aclSharedCache.tx.maxItems=40000
cache.aclSharedCache.maxItems=100000
cache.aclSharedCache.timeToLiveSeconds=0
cache.aclSharedCache.maxIdleSeconds=0
cache.aclSharedCache.cluster.type=fully-distributed
cache.aclSharedCache.backup-count=1
cache.aclSharedCache.eviction-policy=LRU
cache.aclSharedCache.eviction-percentage=25
cache.aclSharedCache.merge-policy=hz.ADD_NEW_ENTRY
Note the notion of cache backups (backup-count=??), that guarantees that a distributed cache has a specific number of backups, in case of a node holding that bit of the cache dies, those caches are still accessible. The more backups you have, the more memory will be consumed.
We also need to consider, that in distributed caches, when there are a lot of remote gets the network traffic will increase.
On the other hand, if we choose and invalidation cache mechanism and the caches are changing often, the Invalidation messages can also be a single point of network stress. So overall it’s all about analyzing the trade-offs of each mechanism and to choose the more appropriate for each use case.
LRU = Least Recently Used
LFU = Least Frequently Used
For debugging purposes, you can disable the L2 cache. The database will keep working, but at a slower rate.The Level 2 (L2) cache provides out-of-transaction caching of Java objects inside the Alfresco system.
The L2 cache objects are stored in memory attached to the application scope of the server. Sticky sessions must be used to keep a user that has already established a session on one server for the entire session. By default, the cache replication makes use of RMI to replicate changes to all nodes in the cluster using the Peer Cache Replicator. Each replicated cache member notifies all other cache instances when its content has changed, in case of invalidating cache types. Fully distributes is a different approach introduced with hazelcast.
If you have issues with the replication of information in clustered systems, that is, the cache cluster test fails, you may want to confirm this by setting the following properties to true in the alfresco-global.properties file as follows :
system.cache.disableMutableSharedCaches=true
system.cache.disableImmutableSharedCaches=true
An important indicator that you need to increase your caches is when you see messages like the ones below on your alfresco.log file indicating that some specific caches are full.
13:25:12,901 WARN [cache.node.nodesTransactionalCache] Transactional update cache ‘org.alfresco.cache.node.nodesTransactionalCache’ is full (125000).
13:25:14,182 WARN [cache.node.aspectsTransactionalCache] Transactional update cache ‘org.alfresco.cache.node.aspectsTransactionalCache’ is full (65000).
13:25:14,214 WARN [cache.node.propertiesTransactionalCache] Transactional update cache ‘org.alfresco.cache.node.propertiesTransactionalCache’ is full (65000).
Let’s follow the money , In this case we “Follow the Request”
jstack prints Java stack traces of Java threads for a given Java process or core file or a remote debug server. For each Java frame, the full class name, method name, 'bci' (byte code index) and line number, if available, are printed.
Your repository can get easier maxed out if you are setting the application server to process more connections/threads than the machine can handle it.
Consider first “bottlenecking”/reducing the number of application server connector’s threads in order each call gets CPU and memory resources needed to perform properly, so that your system gets a more stable response time over peak usages (scale the database connection pool maximum accordingly as mentioned before). You may need to scale up (or scale out your cluster) for handling a bigger number of calls during peak usages in place of just increasing the number of threads of one node application server.
Alfresco (like all Java applications) uses JDBC to access the database, inspecting JDBC can yield useful information for developers, the tools below can be used to inspect JDBC.
jdbcspy
Log4jdbc – more active development, easier to configure (IMHO)
Regular maintenance and tuning of the Alfresco database is necessary. Specifically, all of the database servers that Alfresco supports require at the very least that some form of index statistics maintenance be performed at frequent, regular intervals to maintain optimal Alfresco performance.
Index maintenance can have a severe impact on Alfresco performance while in progress, hence it needs to be discussed with your project team and scheduled appropriately. Make sure your database is tuned for your usage patterns: high throughput, long running queries, decision support, mixed usage. Finally check that the specific supported database being used is configured properly and according to Alfresco documentation.
In regards to latency in communication, the golden rule is that the response time from the DB in general, should be around 4ms or lower.
If the amount of nodes and the expected concurrency increases, for example when the database grows to more than 20 million nodes and the number of concurrent users increase considerably we suggest adopting an active-active database cluster approach.
Understand JMX configuration and priority
Alfresco allows for setting most of its configuration through JMX (or the Share admin console) in hot without need to restart and in a cluster aware mode. This is very handy for solving issues in hot and testing in general. But beware that those settings are stored in the database and have priority over the static settings (the file configurations on your server in general in alfresco-global.properties) will be active again when you restart the system.
This has a drawback, which is the fact that your static configuration may not reflect the real configuration state of your system what can make life complicated for system administrators in certain circumstances (especially newcomers).
Keep your static configuration up to date
You should consider as a best practice keeping the static files up to date with your configuration and also try to make sure they are as much as possible the ones being actively configuring your system. This would include in general reverting any configuration setup through JMX as soon as possible in order the system uses again the static configuration with whatever values you find appropriate.