diff --git oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/ItemImpl.java oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/ItemImpl.java
index 6dadaca..6195390 100644
--- oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/ItemImpl.java
+++ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/ItemImpl.java
@@ -64,6 +64,7 @@ abstract class ItemImpl<T extends ItemDelegate> implements Item {
 
     public static final String ITEM_SAVE_DOES_SESSION_SAVE = "item-save-does-session-save";
     public static final int MV_PROPERTY_WARN_THRESHOLD = 1000;
+    public static final int STRING_PROPERTY_WARN_THRESHOLD = 4 * 1000; //4kb
 
     /**
      * The value of this flag determines the behaviour of {@link #save()}. If {@code false},
diff --git oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
index 15ffa7a..28a0f8c 100644
--- oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
+++ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
@@ -1361,6 +1361,7 @@ public class NodeImpl<T extends NodeDelegate> extends ItemImpl<T> implements Nod
         final String oakName = getOakPathOrThrow(checkNotNull(jcrName));
         final PropertyState state = createSingleState(
                 oakName, value, Type.fromTag(value.getType(), false));
+        checkPropertySize(jcrName, state);
         return perform(new ItemWriteOperation<Property>("internalSetProperty") {
             @Override
             public void checkPreconditions() throws RepositoryException {
@@ -1397,6 +1398,8 @@ public class NodeImpl<T extends NodeDelegate> extends ItemImpl<T> implements Nod
             LOG.warn("Large multi valued property [{}/{}] detected ({} values).",dlg.getPath(), jcrName, values.length);
         }
 
+        checkPropertySize(jcrName, state);
+
         return perform(new ItemWriteOperation<Property>("internalSetProperty") {
             @Override
             public void checkPreconditions() throws RepositoryException {
@@ -1421,6 +1424,24 @@ public class NodeImpl<T extends NodeDelegate> extends ItemImpl<T> implements Nod
         });
     }
 
+    private void checkPropertySize(String jcrName, PropertyState state) {
+        if (state.getType().tag() == PropertyType.STRING){
+            if (state.isArray()) {
+                for (int i = 0; i < state.count(); i++) {
+                    checkPropertySize(jcrName, state.getValue(Type.STRING, i));
+                }
+            } else {
+                checkPropertySize(jcrName, state.getValue(Type.STRING));
+            }
+        }
+    }
+
+    private void checkPropertySize(String jcrName, String value) {
+        if (value.length() > STRING_PROPERTY_WARN_THRESHOLD) {
+            LOG.warn("Large string property [{}/{}] detected ({} size).",dlg.getPath(), jcrName, value.length());
+        }
+    }
+
     /**
      * Removes all {@code null} values from the given array.
      *
diff --git oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java
index fd9385d..0ea30c2 100644
--- oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java
+++ oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java
@@ -20,8 +20,9 @@ import static junit.framework.Assert.assertEquals;
 import static junit.framework.Assert.assertNotNull;
 import static junit.framework.Assert.assertTrue;
 import static junit.framework.Assert.fail;
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.hasItems;
 import static org.junit.Assert.assertThat;
-import static org.junit.matchers.JUnitMatchers.containsString;
 
 import java.util.Arrays;
 import java.util.Calendar;
@@ -36,7 +37,12 @@ import javax.jcr.Session;
 import javax.jcr.nodetype.ConstraintViolationException;
 import javax.jcr.nodetype.NodeType;
 
+import ch.qos.logback.classic.Level;
+import com.google.common.base.Strings;
+import org.apache.jackrabbit.oak.commons.junit.LogCustomizer;
 import org.apache.jackrabbit.oak.fixture.NodeStoreFixture;
+import org.apache.jackrabbit.oak.jcr.session.NodeImpl;
+import org.junit.Assert;
 import org.junit.Test;
 
 public class CRUDTest extends AbstractRepositoryTest {
@@ -230,4 +236,27 @@ public class CRUDTest extends AbstractRepositoryTest {
         }
     }
 
+    @Test
+    public void largeStringProperty() throws Exception{
+        LogCustomizer customLogs = LogCustomizer.forLogger(NodeImpl.class.getName())
+                .filter(Level.WARN)
+                .create();
+        customLogs.starting();
+        Session s1 = getAdminSession();
+        Node a = s1.getRootNode().addNode("a");
+        String path = a.getPath();
+        a.setProperty("foo", Strings.repeat("x", NodeImpl.STRING_PROPERTY_WARN_THRESHOLD + 1));
+
+        Node b = s1.getRootNode().addNode("b");
+        String bpath = b.getPath();
+        String[] vals = {"foo", Strings.repeat("x", NodeImpl.STRING_PROPERTY_WARN_THRESHOLD + 1)};
+        b.setProperty("foo", vals);
+        s1.save();
+
+        Assert.assertEquals(2, customLogs.getLogs().size());
+        customLogs.finished();
+
+
+    }
+
 }
