diff --git a/config/install/monitoring.sensor_config.monitoring_perfomance_settings.yml b/config/install/monitoring.sensor_config.monitoring_perfomance_settings.yml
new file mode 100644
index 0000000..07e2352
--- /dev/null
+++ b/config/install/monitoring.sensor_config.monitoring_perfomance_settings.yml
@@ -0,0 +1,15 @@
+id: performance_settings
+label: 'Performance settings'
+description: 'Monitors performance settings'
+category: 'System'
+plugin_id: monitoring_performance_settings
+value_type: 'no_value'
+value_label: 'Performance'
+status: TRUE
+caching_time: 86400
+settings:
+  css_aggregation: TRUE
+  js_aggregation: TRUE
+  page_caching: TRUE
+  non_zero_max_setting: TRUE
+  null_backend_cache: TRUE
diff --git a/config/schema/monitoring.schema.yml b/config/schema/monitoring.schema.yml
index 0fe58fb..8c40e30 100644
--- a/config/schema/monitoring.schema.yml
+++ b/config/schema/monitoring.schema.yml
@@ -269,6 +269,26 @@ monitoring.settings.system_load:
       label: Average
       type: string
 
+monitoring.settings.monitoring_performance_settings:
+  type: monitoring.settings_base
+  label: 'Monitoring perfomance settings'
+  mapping:
+    css_aggregation:
+      label: 'CSS Aggregation'
+      type: boolean
+    js_aggregation:
+      label: 'JS Aggregation'
+      type: boolean
+    page_caching:
+      label: 'Page caching'
+      type: boolean
+    non_zero_max_setting:
+      label: 'Non zero max age setting'
+      type: boolean
+    null_backend_cache:
+      label: 'Null backend cache bins'
+      type: boolean
+
 monitoring.settings.monitoring_installed_modules:
   type: monitoring.settings_base
   label: 'Installed modules sensor settings'
diff --git a/src/Plugin/monitoring/SensorPlugin/PerformanceSettingsSensorPlugin.php b/src/Plugin/monitoring/SensorPlugin/PerformanceSettingsSensorPlugin.php
new file mode 100644
index 0000000..cefed83
--- /dev/null
+++ b/src/Plugin/monitoring/SensorPlugin/PerformanceSettingsSensorPlugin.php
@@ -0,0 +1,231 @@
+<?php
+
+namespace Drupal\monitoring\Plugin\monitoring\SensorPlugin;
+
+use Drupal\Core\Cache\Cache;
+use Drupal\Core\Cache\CacheableMetadata;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\monitoring\Result\SensorResult;
+use Drupal\monitoring\Result\SensorResultInterface;
+use Drupal\monitoring\SensorPlugin\ExtendedInfoSensorPluginInterface;
+use Drupal\monitoring\SensorPlugin\SensorPluginBase;
+use Drupal\Core\Cache\NullBackend;
+
+/**
+ * Monitors performance settings.
+ *
+ * @SensorPlugin(
+ *   id = "monitoring_performance_settings",
+ *   label = @Translation("Performance settings"),
+ *   description = @Translation("Monitors performance settings."),
+ *   addable = FALSE
+ * )
+ */
+class PerformanceSettingsSensorPlugin extends SensorPluginBase implements ExtendedInfoSensorPluginInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function runSensor(SensorResultInterface $sensor_result) {
+    $sensor_result->setStatus(SensorResultInterface::STATUS_OK);
+
+    $performance_settings = $this->performanceSettings();
+    $value = 0;
+    foreach ($performance_settings as $performance_setting) {
+      if (!$performance_setting['status']) {
+        $sensor_result->addStatusMessage($this->t('@label : @value', ['@label' => $performance_setting['label'], '@value' => $performance_setting['value']]));
+        $value++;
+      }
+    }
+
+    if ($value !== 0) {
+      $sensor_result->setStatus(SensorResult::STATUS_WARNING);
+    }
+    if ($sensor_result->getStatus() == SensorResultInterface::STATUS_OK) {
+      $sensor_result->addStatusMessage('Optimal configuration');
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function resultVerbose(SensorResultInterface $result) {
+    $output = [];
+    $performance_config = \Drupal::config('system.performance');
+    $css_enabled = $performance_config->get('css.preprocess');
+    $js_enabled = $performance_config->get('js.preprocess');
+    $moduleHandler = \Drupal::service('module_handler');
+    $page_caching_enabled = $moduleHandler->moduleExists('page_cache');
+    $cacheable_metadata = new CacheableMetadata();
+    $non_zero_max_age = $cacheable_metadata->getCacheMaxAge() === 0 ?: 1;
+    $bins = Cache::getBins();
+    $null_cache_bins = FALSE;
+    foreach ($bins as $bin) {
+      if ($bin instanceof NullBackend) {
+        $null_cache_bins = TRUE;
+      }
+    }
+    $header = [];
+    $header['label'] = $this->t('Label');
+    $header['status'] = $this->t('Status');
+    $rows = [];
+    $css_ignored = $this->sensorConfig->getSetting('css_aggregation') ? '' : ' (Ignored)';
+    $rows[] = [
+      'label' => 'CSS Aggregation' . $css_ignored,
+      'status' => $css_enabled ? 'Enabled' : 'Disabled'
+    ];
+    $js_ignored = $this->sensorConfig->getSetting('js_aggregation') ? '' : ' (Ignored)';
+    $rows[] = [
+      'label' => 'JS Aggregation' . $js_ignored,
+      'status' => $js_enabled ? 'Enabled' : 'Disabled'
+    ];
+    $page_caching_ignored = $this->sensorConfig->getSetting('page_caching') ? '' : ' (Ignored)';
+    $rows[] = [
+      'label' => 'Page caching' . $page_caching_ignored,
+      'status' => $page_caching_enabled ? 'Enabled' : 'Disabled'
+    ];
+    $non_zero_ignored= $this->sensorConfig->getSetting('non_zero_max_setting') ? '' : ' (Ignored)';
+    $rows[] = [
+      'label' => 'Non-zero max age' . $non_zero_ignored,
+      'status' => $non_zero_max_age ? 'Yes' : 'No'
+    ];
+    $null_cache_ignored = $this->sensorConfig->getSetting('null_backend_cache') ? '' : ' (Ignored)';
+    $rows[] =[
+      'label' => 'Null backend cache bins' . $null_cache_ignored,
+      'status' => $null_cache_bins ? 'Yes' : 'No'
+    ];
+    $output['performance'] = [
+      '#type' => 'verbose_table_result',
+      '#title' => $this->t('Performance settings'),
+      '#header' => $header,
+      '#rows' => $rows,
+    ];
+    return $output;
+  }
+
+  /**
+   * Helper function for performance settings.
+   *
+   * @return array
+   *  The performance settings.
+   */
+  protected function performanceSettings() {
+    $performance_settings = [];
+    $performance_config = \Drupal::config('system.performance');
+
+    // Check CSS aggregation.
+    if ($this->sensorConfig->getSetting('css_aggregation')) {
+      $css_enabled = $performance_config->get('css.preprocess');
+      $performance_settings[] = [
+        'label' => 'CSS Aggregation',
+        'value' => $css_enabled ? 'Enabled' : 'Disabled',
+        'status' => $css_enabled,
+      ];
+    }
+
+    // Check JS aggregation.
+    if ($this->sensorConfig->getSetting('js_aggregation')) {
+      $js_enabled = $performance_config->get('js.preprocess');
+      $performance_settings[] = [
+        'label' => 'JS Aggregation',
+        'value' => $js_enabled ? 'Enabled' : 'Disabled',
+        'status' => $js_enabled,
+      ];
+    }
+
+    // Check page caching.
+    if ($this->sensorConfig->getSetting('page_caching')) {
+      $moduleHandler = \Drupal::service('module_handler');
+      $page_caching_enabled = $moduleHandler->moduleExists('page_cache');
+      $performance_settings[] = [
+        'label' => 'Page caching',
+        'value' => $page_caching_enabled ? 'Enabled' : 'Disabled',
+        'status' => $page_caching_enabled,
+      ];
+    }
+
+    // Check if there is a non zero max age.
+    if ($this->sensorConfig->getSetting('non_zero_max_setting')) {
+      $cacheable_metadata = new CacheableMetadata();
+      $non_zero_max_age = $cacheable_metadata->getCacheMaxAge() === 0 ?: 1;
+      $performance_settings[] = [
+        'label' => 'Non-zero max age',
+        'value' => $non_zero_max_age ? 'Yes' : 'No',
+        'status' => $non_zero_max_age === FALSE,
+      ];
+    }
+
+    // Check if there are any NullBackend cache bins.
+    if ($this->sensorConfig->getSetting('null_backend_cache')) {
+      $bins = Cache::getBins();
+      $null_cache_bins = FALSE;
+      foreach ($bins as $bin) {
+        if ($bin instanceof NullBackend) {
+          $null_cache_bins = TRUE;
+        }
+      }
+      $performance_settings[] = [
+        'label' => 'Null backend cache bins',
+        'value' => $null_cache_bins ? 'Yes' : 'No',
+        'status' => $null_cache_bins === FALSE,
+      ];
+    }
+
+    return $performance_settings;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDefaultConfiguration() {
+    $default_config = [
+      'settings' => [
+        'css_aggregation' => TRUE,
+        'js_aggregation' => TRUE,
+        'page_caching' => TRUE,
+        'non_zero_max_setting' => TRUE,
+        'null_backend_cache' => TRUE,
+      ],
+    ];
+    return $default_config;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form = parent::buildConfigurationForm($form, $form_state);
+    $form['css_aggregation'] = [
+      '#type' => 'checkbox',
+      '#title' => $this->t('CSS Aggregation'),
+      '#description' => $this->t('Track the css aggregation'),
+      '#default_value' => $this->sensorConfig->getSetting('css_aggregation'),
+    ];
+    $form['js_aggregation'] = [
+      '#type' => 'checkbox',
+      '#title' => $this->t('JS Aggregation'),
+      '#description' => $this->t('Track the js aggregation'),
+      '#default_value' => $this->sensorConfig->getSetting('js_aggregation'),
+    ];
+    $form['page_caching'] = [
+      '#type' => 'checkbox',
+      '#title' => $this->t('Page caching'),
+      '#description' => $this->t('Track the page caching'),
+      '#default_value' => $this->sensorConfig->getSetting('page_caching'),
+    ];
+    $form['non_zero_max_setting'] = [
+      '#type' => 'checkbox',
+      '#title' => $this->t('Non zero max age setting'),
+      '#description' => $this->t('Checks the max age settings'),
+      '#default_value' => $this->sensorConfig->getSetting('non_zero_max_setting'),
+    ];
+    $form['null_backend_cache'] = [
+      '#type' => 'checkbox',
+      '#title' => $this->t('Null backend cache bin'),
+      '#description' => $this->t('Checks if there is a null backend cache bin'),
+      '#default_value' => $this->sensorConfig->getSetting('null_backend_cache'),
+    ];
+
+    return $form;
+  }
+}
diff --git a/tests/src/Kernel/MonitoringPerformanceSettingsPluginTest.php b/tests/src/Kernel/MonitoringPerformanceSettingsPluginTest.php
new file mode 100644
index 0000000..08887e3
--- /dev/null
+++ b/tests/src/Kernel/MonitoringPerformanceSettingsPluginTest.php
@@ -0,0 +1,60 @@
+<?php
+
+namespace Drupal\Tests\monitoring\Kernel;
+
+use Drupal\Core\Cache\Cache;
+use Drupal\Core\Cache\CacheableMetadata;
+use Drupal\Core\Cache\NullBackend;
+
+/**
+ * Kernel tests for performance settings sensor plugin.
+ *
+ * @group monitoring
+ */
+class MonitoringPerformanceSettingsPluginTest extends MonitoringUnitTestBase {
+
+  /**
+   * Tests the perfomance settings sensor plugin.
+   */
+  public function testPerfomanceSettingsSensorPlugin() {
+
+    $config = \Drupal::configFactory();
+
+    // Disable CSS and enable JS aggregation.
+    $config->getEditable('system.performance')
+      ->set('css.preprocess', FALSE)
+      ->set('js.preprocess', TRUE)
+      ->save();
+
+    // Enable page caching.
+    $this->enableModules(['page_cache']);
+
+    // Create a NullBackend cache bin.
+    $cache_backend = new NullBackend('cache');
+
+    $sensor_manager = monitoring_sensor_manager();
+    $sensor_config = $sensor_manager->getSensorConfigByName('performance_settings');
+    $sensor_config->set('status', TRUE);
+    $sensor_config->save();
+
+    // Run sensor and assert message and verbose output.
+    $sensor_result = $this->runSensor('performance_settings');
+    $this->assertTrue($sensor_result->isWarning());
+    $this->assertEquals('CSS Aggregation : Disabled, Non-zero max age : Yes', $sensor_result->getMessage());
+
+    // Ignore the css aggregation and non-zero max age setting.
+    $settings = $sensor_config->getSettings();
+    $settings['css_aggregation'] = FALSE;
+    $settings['non_zero_max_setting'] = FALSE;
+    $sensor_config->settings = $settings;
+    $sensor_config->save();
+    monitoring_sensor_manager()->resetCache();
+
+    // Check the result.
+    $sensor_result = $this->runSensor('performance_settings');
+    $this->assertTrue($sensor_result->isOk());
+    $this->assertEquals('Optimal configuration', $sensor_result->getMessage());
+    $output = $sensor_result->getVerboseOutput();
+    $this->assertContains('CSS Aggregation (Ignored)', $output['performance']['#rows'][0]);
+  }
+}
